Hibernate 实体持久化生命周期状态

Hibernate是与应用创建的普通的java对象一起工作的,在原始状态(没有标签)Hibernate不会定义你的java类,但是当他们按照需要的标签进行标注之后,那么Hibernate就能识别他们,例如存储在数据库,更新他们的数值,这些对象的关系可以用Hibernate进行映射。

考虑到映射到Hibernate的对象实例,它可以有四种状态transient, persistent,detached或者 removed,我们现在就学习一下他们的四种状态。

瞬时状态对象

瞬时状态对象存在于堆内存中,Hibernate不管理瞬时状态或者把改变持久到瞬时状态中去

瞬时状态和Hibernate没有关系
为了把改变持久到瞬时状态中去,你需要session把瞬时对象保存到数据库中去,这时候Hibernate会给他唯一的标识,并把这个对象标识为持久状态

持久状态对象

持久状态对象存储在数据库中,Hibernate为持久化对象管理持久状态

持久对象由Hibernate管理
如果持久对象的值或者属性改变了,Hibernate在应用提交的时候会将数据库更新到最新的状态。

托管状态对象

托管状态对象在数据库中有一个表像,但是对这个对象的改变并不会反应到数据库中去,反之亦然。对象和数据库的短暂分离如下图所示

托管状态对象可以由其关联的正在关闭的session创建,或者是session调用清空方法的时候。为了把改变持久到托管状态对象,应用必须重新连上有效的Hibernate session,一个托管状态的实体可以在程序调用load, refresh, merge, update(), or save() 等方法的时候和新的Hibernate session联系在一起,最后,托管对象将会变成持久对象,然后由Hibernate session 管理。

删除状态对象

删除状态对象由Hibernate管理,当标注了这个状态的对象当session提交的时候,数据库中相应的实体对象将会被删除。

重要的点

1、新创建的POJO对象会是瞬时状态,瞬时状态并不会代表数据库中的记录,例如没有和任何的session对象相关连,它就是一个简单的java对象。
2、持久对象是数据库中的一行数据,并且和一些特定的Hibernate session相关联,持久对象的改变可以被Hibernate扑捉到,当提交的时候保存到数据库
3、托管状态对象是那些曾经的持久对象,现在不在持久的那些对象,为了把对象状态的改变持久进去,你可以重新把他们和Hibernate session像连接
4、移除状态的对象是session remove 方法调用之后得对象状态。
原文地址:http://howtodoinjava.com/2014/09/04/hibernate-entity-persistence-lifecycle-states/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值