博客地址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状态此时状态表现是,内存有这个对象,缓存没有这个对象,数据库有对应的记录,

 理解好这三种状态,就会在事物提交之后,明白为什么有的更改可以同步到数据库中,有的却不能的原因。

 具体事例以后有时间给出,待续……

版权声明:本文为shizhongtao原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/shizhongtao/p/3437372.html