标签:代码 oracle ... date() 程序 nat 意义 持久 ide
从之前测试类中查询的使用来看:
User user = session.get(User.class, 1);
说明hibernate内部是使用反射技术实现生成对象实例,所以持久化类中的Java实体类必须提供一个无参构造
hibernate生成对象实例时,需要获取、设置属性值
例如User中的id
public class User { private Integer id; private String name; private String password; ...... }
映射文件配置id属性
<hibernate-mapping> <!-- 配置表与实体的映射关系 --> <class name="com.qf.entity.User" table="user"> <id name="id" column="id"> <generator class="native"></generator> </id> ...... </class> </hibernate-mapping>
因为基本数据类型默认值是0,容易出现很多问题
例如:
<hibernate-mapping> <!-- 配置表与实体的映射关系 --> <class name="com.qf.entity.User" table="user"> <id name="id" column="id"> <!-- 主键生成策略 --> <generator class="native"></generator> </id> <property name="name" column="name"/> <property name="password" column="password"/> </class> </hibernate-mapping>
@Test public void save(){ Session session = SessionFactoryUtil.getSession(); Transaction ts = session.beginTransaction(); //瞬时态对象:新建对象,还没有唯一标识OID,也没有被session对象管理 User user = new User("hz", "0"); //持久态对象:有唯一标识OID,并且被session对象管理 Serializable save = session.save(user); System.out.println("user:"+user); ts.commit(); session.close(); //脱管态对象:session销毁了,不被session对象管理,但是还有唯一标识OID System.out.println("user:"+user); }
获取:User user = new User();
转换
- 转换成持久态对象:save()、saveOrUpdate()
- 转换成脱管态对象:user.setId(2);
获取:get()、load()、find()、iterate()
转换
- 转换成瞬时态对象:delete()
- 转换成脱管态对象:
- session.close():销毁session对象
- session.clear():清空所有对象
- session.evict(obj):清空某一个对象
获取:User user = new User(3,"","");或者User user = new User(); user.setId(3);
转换
- 转换成瞬时态对象:user.setId(null);
- 转换成持久态对象:update()、saveOrUpdate()、lock()
@Test public void test(){ Session session = SessionFactoryUtil.getSession(); Transaction ts = session.beginTransaction(); //获得持久化对象 User user = session.get(User.class, 1); System.out.println("name:"+user.getName()); user.setName("test"); ts.commit(); session.close(); }
控制台输出
Hibernate: select user0_.id as id1_0_0_, user0_.name as name2_0_0_, user0_.password as password3_0_0_ from user user0_ where user0_.id=? name:wxf Hibernate: update user set name=?, password=? where id=?
再次执行test()方法,console输出
Hibernate: select user0_.id as id1_0_0_, user0_.name as name2_0_0_, user0_.password as password3_0_0_ from user user0_ where user0_.id=? name:test
标签:代码 oracle ... date() 程序 nat 意义 持久 ide
原文地址:https://www.cnblogs.com/qf123/p/10150561.html