(学习笔记)Hibernate的持久化周期

在持久化周期中,不同的ORM接口实现使用不同的术语,定义不同的状态和状态转变。同时,内部状态的使用不同于外部客户端应用。Hibernate只定义了三种状态,隐藏了复杂的内部实现(客户端代码中看不到).三种状态分别是:transient, persistent, detached.

 

一、transient objects

     1、 在Hibernate中,对象的初始化使用new 操作,但并没有立刻保存入数据库(persistent),他们的状态是transient,一旦引用对象的“指针”丢失,他们的状态也就丢失了——被垃圾回收了(这个就是他们的生命长度)。

     2、Hibernate认为所有的transient状态的实例都是非事务的。修改此状态的实例不会在任何事务中进行。也就是说对于此状态对象的改变,Hibernate并没有提供回滚功能。

     3、对象一旦被transient状态的对象引用,默认的此对象也是transient,即状态具有传递性。

二、persisten objects

     1、持久化对象是具有数据库的关键key的是那种被session.save()方法后的对象。他和数据库管理系统关联在一起。此状态对象具有传递性,他总是与一个session相关联,总是处于事务中。

     2、持久化对象在完成事务之后,他的状态应该和数据库中的状态保持一致。当一个事务提交的时候(INSERT, UPDATE, DELETE),在缓存中的状态应该传播到数据库中(也就是状态保持一致)。状态的传播也可能发生在其他时刻,比如,在执行语句的时候,Hibernate可能要与数据库同步。

     3、一个持久化对象的new操作,会跟数据库的primary key值相关联,但是他并没有被插入数据库中。这个new 持久化对象一致保存这“new”特性,直到发生同步(发生一些数据库操作)。当然,在事务结束时,我们不需要人为的更新缓存中的每一个persistent对象所对应的数据库row。ORM软件必须有一种检测工具:知道哪一个persisten对象在事务中被改变了。我们称这种举措为:"自动脏检查(automatic dirty chekcing:一个对象的改变没有立刻传递到数据库中,认为:dirty)",Hibernate尽可能迟的传递这种改变信息到数据库?Hibernate还能能够检测他的属性的改变,并尽可能只更新对应的字段。但是在某种环境下他是有害的,所以,默认情况下,Hibernate对所有的columns进行了更新,如果你想要支持update modified columns,你可以使用 dynamic-update='true'(在配置文件中定义)。

    4、一种persistent对象可以通过delete()方法的调用变成transient状态。

 

三、Detached objects

    1、当一个事务结束的时候,与持久化管理关联的persistent对象仍然存在,(一旦事务提交成功,缓存中的对象状态需要跟数据库保持一致)。

    2、当你close the Session,persistent对象将失去与持久化管理器关联。我们称这种对象所处的状态为detached。他意味着他们的状态不会再与数据库进行同步了。他们不在Hibernate管理中管理,但是他们仍然保存这persistent的数据信息,允许在事务的外头保留一个引用指向此对象。Hibernate允许你在一个新的事务中复用这些对象。从一个事务中返回对象到持久层并在新的一个事务中复用他们,这是Hibernate一个主要的卖点。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值