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()方法能够清除缓存中所有持久化对象,使它们变为游离对象。
四种状态:
(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()方法能够清除缓存中所有持久化对象,使它们变为游离对象。