Hibernate中的持久化对象状态说明
程序员文章站
2022-06-08 22:09:36
...
Hibernate框架中为持久化的对象设计了三种状态,处于这三种状态的对象通过一定的操作对象状态可以发生相互转化:
transient--瞬时态:通过new关键字创建的实体对象或尚未与Hibernate Session关联的对象,失去引用的话,就会被Java虚拟机回收。
persistent--持久态:通过get/load、Query查询获得或已经与当前Hibernate Session产生关联,并且相关联的session没有关闭,且事务尚未提交。
detached--脱管态:无法直接获得;存在持久化OID,但没有与当前Hibernate Session关联,hibernate不能检测到脱管状态改变
如下代码所示:
持久化对象之间的状态转换:
持久化对象之间的转变:
transient--瞬时态:通过new关键字创建的实体对象或尚未与Hibernate Session关联的对象,失去引用的话,就会被Java虚拟机回收。
persistent--持久态:通过get/load、Query查询获得或已经与当前Hibernate Session产生关联,并且相关联的session没有关闭,且事务尚未提交。
detached--脱管态:无法直接获得;存在持久化OID,但没有与当前Hibernate Session关联,hibernate不能检测到脱管状态改变
如下代码所示:
Session session = HibernateUtils.openSession(); // 开启事务 Transaction transaction = session.beginTransaction(); Dog dog = new Dog (); // 瞬时态(没有OID,未与Session关联) dog .setName("小狗狗"); dog .setAge(1); session.save(dog );// 持久态(具有OID,与Session关联) // 提交事务,关闭Session transaction.commit(); session.close(); System.out.println(dog .getId()); // 脱管态(具有 OID,与Session断开关联)
持久化对象之间的状态转换:
持久化对象之间的转变:
- 瞬时——持久:save、saveOrUpdate
- 瞬时——脱管:对象.setID(1);为瞬时对象设置新的OID
- 持久——瞬时:delete(被删除持久化对象,不建议再次使用)
- 持久——脱管:evict(清除一级缓存中某个对象)、close(关闭Session,清除一级缓存)、clear(清除一级缓存所有对象)
- 脱管——瞬时:对象.setID(null);删除对象OID
- 脱管——持久:update、saveOrUpdate、lock
上一篇: arm架构函数帧栈分析
下一篇: DS18B20温度传感器实验