第四章 Hibernate中的持久化对象的生命周期

4.1提供对象状态管理的目的
使开发者不再需要理会底层数据库系统的细节
使用Hibernate的开发者应该总是关注对象的状态(state),不必考虑SQL语句的执行


4.2 Hibernate 仅仅定义了三种状态:瞬时(临时)、持久和脱管(游离),对客户端代码隐藏了其内部实现的复杂性
4.2.1 瞬时对象(Transient Object):Hibernate中的持久化对象的生命周期
使用new操作符初始化的对象不是立刻就持久的。它们的状态是瞬时的,也就是说它们没有任何跟数据库表相关联的行为,只要应用不再引用这些对象(不再被任何其它对象所引用),它们的状态将会丢失,并由垃圾回收机制回收
4.2.2持久化对象(Persistent Object):
持久实例是任何具有数据库标识的实例,它有持久化管理器Session统一管理,持久实例是在事务中进行操作的----它们的状态在事务结束时同数据库进行同步。当事务提交时,通过执行SQL的INSERT、UPDATE和DELETE语句把内存中的状态同步到数据库中。
4.2.3游离对象(Detached Object):
Session关闭之后,持久化对象就变为游离对象。游离表示这个对象不能再与数据库保持同步,它们不再受hibernate管理。


4.3三种状态相互转换的说明

第四章 Hibernate中的持久化对象的生命周期


4.4总结:
Transient对象:随时可能被垃圾回收器回收(在数据库中没有于之对应的记录,应为是new初始化),而执行save()方法后,就变为Persistent对象(持久性对象)。没有纳入session的管理。内存中一个对象,没有ID,缓存中也没有。
Persistent对象:在数据库有存在的对应的记录,纳入session管理。在清理缓存(脏数据检查)的时候,会和数据库同步。内存中有、缓存中有、数据库有(ID)。
Detached对象:也可能被垃圾回收器回收掉(数据库中存在对应的记录,只是没有任何对象引用它是指session引用),注引状态经过Persistent状态,没有纳入session的管理。