hibernate对象的三种状态:

7 篇文章 0 订阅
1 篇文章 0 订阅

1,Transient 瞬时 :对象刚new出来,还没设id,设了其他值。
当Theacher t = new Teacher(); t.setXXX后,此时的t是没有id的,只是在内存中有了一个Teacher对象t。此时状态就是transient。
2,Persistent 持久:调用了save()、saveOrUpdate(),就变成Persistent,有id
当执行Session session = sf.getCurrentSession();内存中会有一个Session对象,session对象里有一个hashmap,他其实就是缓存:内存中的一块区域,放着一系列想要的提高读取效率的对象(的引用)。这个HashMap的key,是用来保存将要持久化的对象的id,value保存我们的对象,在这里就是t,其实是保存对象的引用,指向t对象。这都是准备工作,没有调用save方法,里边什么都没有。当执行了session.save(t);就在session的缓存里就有了t对象,key里有了id 1,value指向t对象。调用save方法的同时,会发出insert语句,在数据里也就有了t对象。
所以save完之后,内存里有t对象,数据库里也有t对象,称为persistent状态。
好处:
提高效率,如果要找id=1的对象,直接从内存里去查,而不用去数据库里找。
3,Detached 脱管 : 当session close()完之后,变成Detached。
当执行了session.getTransaction().commit();session自动关了,session对象没有了,缓存也没了。看图可知,此时t对象在内存中还有,只是HashMap指向t没了。t对象已经脱离了session的管理,称为detached 脱管状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值