Hibernate中持久化类实例的三种状态

在Hibernate中持久化类实例的3种状态。Java对象有其自己的生命中期,从通过 new语句创建开始,到不再被任何变量引用结束,结束后它占用的内存将被JVM垃圾回收机制收回。在Hibernate中持久化类实例可以划分为3种状态,分别是临时状态、持久化状态和游离状态。
(1)临时状态
临时状态(transient)是指持久化类实例从通过new语句创建到被持久化之前,处于临时状态的持久化类实例简称“临时对象”。
临时对象具备如下特征:
不存在于Session实例的缓存中,不与任何Session实例相关联
在数据库中没有与之相对应的记录
促使持久化类实例进入临时状态的情况如下:
通过new语句创建新的持久化类实例
通过执行delete()方法删除持久化类实例
(2)持久化状态
持久化状态(persistent)是指持久化类实例从被持久化到Session实例被销毁,处于持久化状态的持久化类实例简称“持久化对象”。
持久化对象具备如下特征:
存在于Session实例的缓存中,与Session实例相关联
在数据库中有与之相对应的记录
Session实例在清理缓存时会根据持久化类实例属性的变化更新数据库
促使持久化类实例进入持久化状态的情况如下:
通过执行save()或saveOrUpdate()方法使临时对象转变为持久化对象
通过执行update()或saveOrUpdate()方法使游离对象转变为持久化对象
通过执行load()或get()方法返回的持久化类实例都是持久化类对象
通过执行find()方法返回的List集合中的持久化类实例都是持久化对象
在允许级联保存的情况下,Session实例在清理缓存时会把与持久化对象关联的临时对象转变为持久化对象
(3)游离状态
游离状态(detached)是指持久化类实例从关联它的Session实例被销毁到该实例消失,处于游离状态的持久化类实例简称“游离对象”。
游离对象具备如下特征:
不存在于Session实例的缓存中,不与任何Session实例相关联
在数据库中有与之相对应的记录(前提条件是没有其它Session实例删除该记录)
促使持久化类实例进入游离状态的情况如下:
通过执行evict()方法,可以从Session实例的缓存中删除一个持久化类实例,使之转变为游离对象
通过执行clear()方法,可以清空Session实例的缓存,使缓存中的所有持久化类实例转变为游离对象
通过执行close()方法,可以销毁Session实例,从而清空Session实例的缓存
(4)3种状态之间的转换过程
为了使读者更好的理解图1所示的持久化类实例的3种状态之间的转换过程,下面以列表的形式给出持久化类实例在程序中各状态之间的转换过程。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值