Hibernate生命周期

生命周期
Hibernate有三种状态,可以互相发生转换。

1.三种状态:

瞬时对象(transientObjects)就是刚刚new出来的对象,数据库中没有记录,也没有被Hibernate的Session管理起来,这种对象是会被GC回收的。[数据库里没有,session里没有]
持久对象(persistentObjects)经历了持久化操作的对象,数据库有记录,被Hibernate的Session管理起来。[数据库里有,session里也有]
托管对象(detachObject),数据库有记录,但没被Hibernate的Session管理起来。[数据库里有,但是session里没有]

2. 对象转换图
在这里插入图片描述
hibernate的生命周期有三种状态,临时、持久和托管。所谓临时状态就是刚刚new出来的对象的状态,临时对象并未存在于数据库也没有被session管理,此时这个对象是有可能被GC回收的,如果临时对象经历了持久化操作,如save()或saveOrUpdate()等,那么它将进入持久状态,持久对象会出现在数据库中,且被session管理起来,当然如果一开始就是查询业务,如get()、load()和iterator()等操作,那么对象将直接进入持久状态。持久对象通过delete()方法可以退回到临时状态,也可以通过close()、clear()或evict()等操作进入托管状态,托管对象在数据库中仍是存在的,但不会再被session管理了,除非再次进行持久化操作,如update()或saveOrUpdate()方法等,那么它将退回到持久状态,或者调用delete()方法退回到临时状态,否则,托管对象最终也会被GC回收。

3. 瞬时-持久
tips:如果调用session.delete(userPojo),则userPojo回退为瞬时对象。
在这里插入图片描述
4.持久-托管
在这里插入图片描述
如果session关闭,或者调用clear方法,或者调用evict方法,那么对象就从持久状态,变成了托管状态,该对象在数据库中仍然存在,但是不再由session管理。
如果继续去调用session.update(userPojo),则再次利用session接管这个对象,对象从托管状态重新变成持久状态,当然前提是session没有关闭。
如果调用session.delete(userPojo),则userPojo回退为瞬时对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值