`
javajdbc
  • 浏览: 41967 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate 持久化对象的几种状态

阅读更多

瞬时对象(Translent Objects): 使用new操作符初始化的对象不是立刻就持久化的。它们的状态是瞬时的 ,也就是说它们没有任何跟数据库表相关联的行为,只要应用不再引用这些对象(不再被任何其他对象所引用),它们的状态将会丢失,并由垃圾回收机制回收。
持久化对象(Persistent Object): 持久实例是任何具有数据标示的势力。她有持久化管理器Session统一管理,持久实例是在事务中进行操作的——它们的状态在事务结合素同数据库进行同步。当事务提交时,通过执行SQL的INSERT、UPDATE和DELETE语句把内存中的状态同步到数据库中。
离线对象(Detached Objects): Session关闭之后,持久化对象就变为离线对象。离线表示为这个对象不能再与数据库保持同步,它们不再受HIbernate管理。但如果从新开启一个Session来管理这个对象,这个对象又变回持久化对象。
  顺时对象和离线对象随时都可能被回收掉。


Translent状态的特征:
    * 在数据库中没有与之匹配的数据
    * 没有纳入session的管理
 
Persistent状态的特征:
    * 在数据库中有与之相匹配的数据
    * 纳入session的管理
    * 在清理缓存(脏数据检查)会和数据库同步

Detached 状态的特征:
    * 在数据库中有与之相匹配的数据
    * 没有纳入session的管理

 

 

 

 

 

新new出来的对象如Student stu = new Student(),就是瞬时对象,它在内存中孤立存在,它的意义是携带信息的载体,不和数据库的数据有任何关联。

通过Session的save()或saveOrUpdate()方法可以把一个瞬时对象与数据库相关联,并把瞬时对象携带的信息通过配置文件所做的映射插入到数据库中,这个瞬时对象就转化成了持久对象(使用get(),load()等方法查询到的数据对象,一出场就是持久对象),并拥有和数据库记录相同的id标识(Hibernate自动将id值赋予它)。

如果这时候使用delete()方法,它就会变回瞬时对象,删除了数据库与这个对象关联的记录,对象与数据库不再有任何的关联。当一个Session指定close()或clear(),evict()之后,持久对象就变成脱管对象,这时对象的id虽然拥有数据库识别值,但他们目前并不在Hibernate持久层的管理下,它与瞬时对象的本质是相同的,只不过比瞬时对象多了数据标识的id值。

离线对象的引用依然有效,对象可以继续被修改,当它重新被关联到某个新的Session上时,会再次变成持久对象(离线状态期间的改动将被持久化到数据库上)。离线对象拥有数据库识别值id,所以它可以通过update(),saveOrUpdate(),lock()等方法,再度与持久层关联。

  • 大小: 136.9 KB
  • 大小: 4.9 KB
分享到:
评论

相关推荐

    精通hibernate:对象持久化技术孙卫琴第二版part2

    本章主要介绍关系数据库中的代理主键(不具有业务含义),接着介绍Hibernate提供的几种内置标识符生成器的用法及适用范围。 6.1 关系数据库按主键区分不同的记录 123 6.1.1 把主键定义为自动增长标识符类型 123 ...

    精通Hibernate:对象持久化技术第二版part3

    本章主要介绍关系数据库中的代理主键(不具有业务含义),接着介绍Hibernate提供的几种内置标识符生成器的用法及适用范围。 6.1 关系数据库按主键区分不同的记录 123 6.1.1 把主键定义为自动增长标识符类型 123 ...

    hibernate 3中的缓存小结

    evict(Object obj):从缓存中清除参数指定的持久化对象。 clear():清空缓存中所有持久化对象。 2.3. 二级缓存的管理: 2.3.1. Hibernate的二级缓存策略的一般过程如下: 1) 条件查询的时候,总是发出一条select * ...

    Java求职面试宝典各大公司常考知识点

    1.4. hibernate的对象的三种持久化状态,并给出解释? 3 1.5. hibernate的三种状态之间如何转换 3 1.6. hibernate中一对多配置文件返回的是什么? 4 1.7. update()和saveOrUpdate()的区别? 4 1.8. hibernate...

    java面试题

    持久化状态(persisted) 58 71.5.3. 游离状态(detached) 58 71.5.4. hibernate的三种状态之间如何转换 59 71.6. Hibernate并发机制,并发问题的处理。 59 71.6.1. Hibernate并发机制 59 71.6.2. 并发问题解决方案 59...

    Java常见面试题208道.docx

    116.hibernate 有几种查询方式? 117.hibernate 实体类可以被定义为 final 吗? 118.在 hibernate 中使用 Integer 和 int 做映射有什么区别? 119.hibernate 是如何工作的? 120.get()和 load()的区别? 121.说一下 ...

    Java语言基础下载

    操纵持久化对象 698 选择继承关系的映射方式 699 映射多对一多态关联 702 内容总结 705 独立实践 705 第三十六章:HQL介绍 706 学习目标 706 HQL的出现 707 进入HQL世界 707 聚合 708 分组 709 在Java中使用HQL 709 ...

    Spring in Action(第2版)中文版

    2.4.1四种自动装配类型 2.4.2混合使用自动和手动装配 2.4.3何时采用自动装配 2.5控制bean创建 2.5.1bean范围化 2.5.2利用工厂方法来创建bean 2.5.3初始化和销毁bean 2.6小结 第3章高级bean装配 3.1声明父...

    Spring in Action(第二版 中文高清版).part2

    2.4.1 四种自动装配类型 2.4.2 混合使用自动和手动装配 2.4.3 何时采用自动装配 2.5 控制Bean创建 2.5.1 Bean范围化 2.5.2 利用工厂方法来创建Bean 2.5.3 初始化和销毁Bean 2.6 小结 第3章 高级Bean装配 ...

    Spring in Action(第二版 中文高清版).part1

    2.4.1 四种自动装配类型 2.4.2 混合使用自动和手动装配 2.4.3 何时采用自动装配 2.5 控制Bean创建 2.5.1 Bean范围化 2.5.2 利用工厂方法来创建Bean 2.5.3 初始化和销毁Bean 2.6 小结 第3章 高级Bean装配 ...

    JAVA上百实例源码以及开源项目

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

    JAVA上百实例源码以及开源项目源代码

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持,Spring做管理,管理Struts和Hibernate。 WebStorage HTML新增的本地存储解决...

Global site tag (gtag.js) - Google Analytics