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

本文围绕Hibernate中Java对象的持久化生命周期展开。介绍了Java对象的三种状态:瞬时、持久和游离状态,阐述了各状态的特点。还说明了如何使用Hibernate API实现对象状态的转换,如瞬时转持久、持久转瞬时等,有助于理解Hibernate实现原理和正确用法。

当应用通过调用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框架企业级应用实战》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值