持久化生命周期
要掌握session的使用,首先要掌握持久化生命周期,一个持久化类的实例在持久化生命周期中会在不同的状态之间转变。Hibernate定义四种状态。
(1)、瞬时状态(transient)
该实例是刚用new语句创建的,还没有被持久化,不处于任何session的缓存中。它没有对象标示符值(主键值)。
特点:不跟任何一个session实例关联。在数据库中没有对应的记录。
(2)、持久化状态(persistent)
已经被持久化,加入到session缓存中。实例目前与某个session有关联。它拥有对象标示符值,并且可能在数据库中有一个对应的行。Hibernate保证在同一个Session实例的缓存中,数据库中的每条记录只对应唯一的一个持久化实例。
特点:持久化对象总是被一个session实例关联。持久化实例和数据库中的相关记录对应。Session在清理缓存时,会根据持久化实例的属性数据变化,同步更新数据库。
(3)移除状态(removed)
如果一个对象已经被计划在一个Session上下文结束时删除,他就处于移除状态,但仍然处于session的缓存中,直到工作单元结束。
实例处理移除状态时不应该被重用,因为一旦工作单元完成,它就将立即从数据库中被删除。
(4)脱管(detached)状态
已经被持久化过,但已经不处于session的缓存中。实例曾经与某个session上下文发生过关联,不过那个上下文已经被关闭。它拥有对象标识符值,并且在数据库中可能存在一个对应的行。
特点:不在位于session的缓存中,即他不再和session关联。但它拥有对象标示符值。