Hibernate持久化生命周期简单介绍

64 篇文章 1 订阅
39 篇文章 1 订阅

当应用通过调用Hibernate API与框架进行交互时,需要从持久化的角度关注应用对象的生命周期。持久化生命周期是Hibernate中的一个关键概念,正确地理解生命周期,可以更好地了解Hibernate的实现原理,掌握Hibernate的正确用法。




一、三种状态

Hibernate框架通过Session来管理Java对象的状态,在持久化生命周期中,Java对象存在以下3种状态。
在这里插入图片描述

1.瞬时状态(Transient)

瞬时状态又称临时状态。如果Java对象与数据库中的数据没有任何的关联,即此Java对象在数据库中没有相关联的记录,此时Java对象的状态为瞬时状态。Session对于瞬时状态的Java对象是一无所知的,当对象不再被其他对象引用时,它的所有数据也就丢失了,对象将会被Java虚拟机按照垃圾回收机制处理。



2,持久状态(Persistent)

当对象与Session关联,被Session管理时,它就处于持久状态。处于持久状态的对象拥有数据库标识(数据库中的主键值)。那么,对象是什么时候与Session发生关联的呢?第一种情况,通过Session的查询接口、get( )方法或者load( )方法从数据库中加载对象时,加载的对象是与数据库表中的一条记录关联的,此时对象与加载它的Session发生关联。第二种情况,对瞬时状态的对象调用Session的save( )、saveOrUpdate( )等方法时,在保存对象数据的同时,Java对象也会与Session发生关联。对于处于持久状态的对象,Session会持续跟踪和管理它们,如果对象的内部状态发生了任何变更,Hibernate会选择合适的时机(如事务提交时)将变更同步到数据库中。



3.游离状态

游离状态又称脱管状态。处于持久状态的对象,脱离与其关联的Session的管理后,就处于游离状态。处于游离状态的对象,Hibernate无法保证对象所包含的数据与数据库中的记录一致,因为Hibernate已经无法感知对该对象的任何操作。Session提供了update( )、saveOrUpdate( )等方法,将处于游离状态的对象的数据以更新的方式同步到数据库中,并将该对象与当前的Session关联。这时,对象的状态就从游离状态重新转换为持久状态。





二、使用Hibernate API转换对象状态

1.瞬时状态转为持久状态

使用Session的save( )、saveOrUpdate( )等方法保存对象后,该对象的状态由瞬时状态转换为持久状态。

使用Session的get( )或load( )方法获取对象,该对象的状态是持久状态。


2.持久状态转为瞬时状态

执行Session的delete( )方法后,对象由原来的持久状态变为瞬时状态,因为此时该对象没有与任何的数据库数据关联。


3.持久状态转为游离状态

执行Session的evict( )、clear( )或close( )方法,对象由原来的持久状态转为游离状态。


4.游离状态转为持久状态

执行Session的update( )或saveOrUpdate( )方法后,对象由游离状态转为持久状态,再次与当前Session相关联。


5.游离状态转为瞬时状态

执行Session的delete( )方法,对象由游离状态转为瞬时状态。


提示

处于瞬时状态或游离状态的对象不再被其他对象引用时,会被Java虚拟机按照垃圾回收机制处理。





三、参考资料

《SSH框架企业级应用实战》

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值