本文共 1519 字,大约阅读时间需要 5 分钟。
Java对象在Hibernate持久化层得状态 四种状态: (1)临时状态(transient):刚new的对象,还没有持久化,并且不处于Session的缓存中。处于临时状态的Java对象称为临时对象。 (2)持久化状态(persistent):已经被持久化,并且加入到Session的缓存中。该对象称为持久化对象。 (3)删除状态(removed):不再处于Session的缓存中,并且Session已经计划将其从数据库中删除。称为删除对象。 (4)游离状态(detached):已经被持久化,但不处于Session的缓存中。称为游离对象。 临时对象的特征 (1)在使用代理主键(不具备任何业务含义)的情况下,OID通常为null。 (2)不处于Session的缓存中,也可以说,不被任何一个Session实例关联。 (3)在数据库中没有对应的记录。 Java对象进入临时状态 (1)通过new创建一个Java对象。 (2)Hibernate配置文件中的hibernate.user_identifier_rollback属性为true的情况下,Session的delete方法能使一个持久化对象或游离 对象转变为临时对象。 持久化对象的特征 (1)OID不为null。 (2)位于一个Session实例的缓存中,也可以说,持久化对象总是被一个Session实例关联。 (3)持久化对象和数据库中的相关记录对应。 (4)Session在清理缓存时,会根据持久化对象的属性 变化,来同步更新数据库。 Java对象进入持久化状态 (1)Session的save()方法把临时对象转变为持久化对象。 (2)Session的load()方法或get()方法返回的对象总是处于持久化状态。 (3)Query的list()方法返回的List集合中存放的都是持久化对象。 (4)Session的update()、saveOrUpdate()和lock()方法使游离对象转变为持久化对象。 (5)当一个持久化对象关联一个临时对象,在允许级联保存的情况下,Session在清理缓存时会把这个临时对象也转变为持久化对象。 被删除对象的特征 (1)OID不为null。 (2)从一个Session实例的缓存中删除。 (3)被删除对象和数据库中的相关记录对应。 (4)Session已计划将其从数据库中删除。 (5)Session在清理缓存时,会执行SQL的delete语句,删除数据库中的相应记录。 Java对象进入删除状态 (1)Hibernate配置文件中hibernate.user_identifier_rollback属性取默认值false的情况下,Session的delete()方法把持久化对象及游离对象 转变为被删除对象。 (2)当一个持久化对象A关联一个持久化对象B,在允许级联删除的情况下,Session删除持久化对象A时,会级联删除持久化对象B,使得持久化对象A 和持久化对象B都进入删除状态。 游离对象的特征 (1)OID不为null。 (2)不再位于Session的缓存中,也可以说,游离对象不被Session关联。 (3)游离对象是由持久化对象转变过来的,因此在数据库中可能还存在与它对于的记录。 Java对象进入游离状态 (1)调用Session的close()方法。 (2)Session的evict()方法能够从缓存中清除一个持久化对象。多数情况下不推荐使用evict()方法, 而应该通过查询语言或者显式的导航来控制对象图的深度。 (3)Session的clear()方法能够清除缓存中所有持久化对象,使它们变为游离对象。转载地址:http://gtyci.baihongyu.com/