Hibernate对象的生命周期及三种状态

对象生命周期

一个Java对象从被创建开始,到不再使用,被垃圾回收期回收为止。

三种状态

对象(持久化类实例)要处于session对象的管理中才能与数据库发生联系。

在基于hibernate框架的应用中,我们依据对象与Session对象的关系不同情况,把对象的状态人为地分为三种:

1)瞬时状态 (Transient):如果对象从未与Session对象关联过,称该对象处于瞬时状态。

2)持久状态(Persistent) :如果对象与Session对象关联起来,且该对象对应到数据库记录,则称该对象处于持久化状态。

3)脱管状态(Detached):如果对象曾经与Session关联过,但因为Session被关闭或调用了Session的evict或clear方法把它从Session中移除了,则该对象脱离了Session的管理,这种状态为脱管状态。

三种状态之间的转换

1)瞬时对象(Transient)

    1.1)new 创建 (无->Transient)

    1.2)delete--(Persistent->Transient) session.delete(o)

2)持久对象(Persistent)

    1.1)save/saveOrUpdate.(Transient->Persistent)

   1.2)get/load/find,iterator.(无->Persistent)

           get--get(User.class,id),通过类名和id从数据库读取指定记录,无匹配记录返回null。

          load--通过类名和id从数据库读取指定记录,无匹配记录抛OjectNotException异常。

          find,iterator---hibernate3已废除,统一Query接口提供。

    1.3)update/saveOrUpdate/lock.(Detached->Persistent)

          lock--把对象和session关联起来,lock之前的修改不会更新到数据库。

          update--把对象和session关联起来,并且会把修改更新到数据库。

          saveOrUpdate--把对象和session关联起来,并且会把修改更新到数据库。

3)脱管对象(Detached)

          evict--把某个对象从session中移除(Persistent->Detached)

          clear--把所有对象从session中移除

          close--关闭session,其中的对象也全部被移除了。

 

状态转换的图示,如下:

三种状态的比较

status

Mem

Session

DB

Transient

Y

N

N

Persistent

Y

Y

Y

Detached

Y

N

Y

瞬时状态的对象只存在于内存中。

持久状态的对象分别存在于内存、session对象、数据库之中。

脱管状态的对象存在于内存、数据库之中,但不在session对象中。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值