Hibernate-1.实体对象生命周期

 Hibernate中,实体对象生命周期分为三种状态:Transient(瞬态)、Persistent(持久态)、Detached(游离态),下面把三种状态的概念说一下。

Transient(瞬态):即普通的实体对象,没有与数据库产生任何关联,比如
UserInfo userInfo = new UserInfo();
这个userInfo对象就是Transient。

Persistent(持久态):处于hibernate框架所管理的状态,与Session相关。比如
UserInfo userInfo = new UserInfo();    -->Transient
getSession().save(userInfo);           -->执行过save后转化为Persistent

Detached(游离态):处理Persistent状态的对象,不再与session关联时,就转化为Detached。比如
UserInfo userInfo = new UserInfo();    -->Transient
getSession().save(userInfo);           -->执行过save后转化为Persistent
getSession().close();                  -->session关闭后,userInfo就转化为Detached

游离态肯定是由持久态转化而来的:持久态对象,当session执行close、clear、evict操作后,就转化为了游离态。
持久态可以由瞬态或游离态转化而来,也可以直接得到:瞬态、游离态对象执行save,update,saveorupdate等操作后,就会转化为持久态。
如果直接通过get、load、find、iterator等方法查询,得到的对象直接就是持久态。
瞬态也可以由持久态、游离态转化而来:从持久态、游离态执行delete操作后,对象就转化为了瞬态

掌握这些知识到底有什么用呢,其实是非常重要的,只有非常理解这三种状态,才能很好的理解API的操作。
比如:
save,update操作,只有对象为瞬态、游离态时才会真正执行,如果为持久态,它是直接返回的,因为持久态的对象不需要执行save操作,只要
属性改变,会直接引起数据库对应内容的改变。
saveOrUpdate操作,当为瞬态时执行save操作,当为游离态时,执行update操作,为持久态时,也什么都不做。
看一些示例来说明这个问题:

 这段代码中的save方法是可有可无的,即使写上了也不会真正执行,因为对象直接get出来,处于持久态
内容的改变会直接引起数据库的改变,不用再执行save操作。


这段代码的update操作就是必须的了,因为通过evict方法将对象从持久态转化为了游离态。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值