博客地址http://www.cnblogs.com/shizhongtao/p/3437372.html,欢迎转载
使用hibernate时候,对于任何一个实体类都有三种状态,他们分别是transient、persistent、detached。以前上课时候,老师给过一个示意图:
在上图中,讲述了三种状态的转换。下面,以自己的理解对三种状态分别进行说明,不过要注意一点,在hibernate3以后session就没有find和iterate方法了,有query接口的list方法来代替。
-
transient:当我们实例化一个对象时候,它就处于这种状态,状态具体表现是,它只是内存中一个对象,没对应的数据库ID,缓存中也没有,不会触发任何数据库语句。
-
persistent:结合上图,当我们使用session的get(),load(),save(),等方式时候,所对应的对象就会从transient对象转换到persistent状态。具体表现是,内存中有这个对象,缓存中有(对应的一个hashmap,有key指向这个对象),数据库有对象对应的(ID)。当执行delete操作之后,这个对象就会转化为transient状态。
-
detached:处于persistent状态的对象,当执行过close,clear方法,就会转换为detached状态此时状态表现是,内存有这个对象,缓存没有这个对象,数据库有对应的记录,
理解好这三种状态,就会在事物提交之后,明白为什么有的更改可以同步到数据库中,有的却不能的原因。
具体事例以后有时间给出,待续……