`
neeleon
  • 浏览: 176882 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

hibernate入门(四)对象三种状态

阅读更多

1 .瞬时(transient ):数据库中没有数据与之对应,超过作用域会被JVM 垃圾回收器回收,一般是new 出来的且与Session 无关系的对象。

2 .脱管- 游离(detached ):数据库中有数据与之对应,但当前没有Session 与之关联:脱管对象状态发生改变,Hibernate 不能检测到。

3 .持久(persistent) :数据库有数据与之对应,当前与Session 有关联,并且相关联的Session 没有关闭,事务没有提交:持久对象状态发生改变时,在事务提交时会影响到数据库。

理解 :与Session 是否关联,数据库是否有数据与之对应是判断三种对象状态的依据。比如,瞬时状态跟它们均无关;脱管,只是数据库有数据与之对应,失去了Session 对它的管理;而持久与两者者有关。

从过程中理解三种对象状态 :结合前面的实例,当我们User user=new User() 一个对象时,它表示创建一个瞬时对象,当调用save(user) 方法时,这个对象成为持久对象,直到事务提交,数据库连接关闭。在这期间,如果我们user.setXXX() 时,会对这个持久对象产生影响,最终它也会被提交到数据库,它的最终提交是在提交事务时。比如save(user) 方法后,跟 user.setName( "new name" ); user.setPassword( "new password" ); 这两句,这样它会在提交时务时,采取对数据库的更新操作,也就是说数据库连接关闭后,数据库存的是“new name ”和“new password ” 而如果开启了“数据库语言显示”可以发现执行两次操作:一次是save 方法的插入操作,一次是setXXX 后提交事务时的更新作(特别说明,持久对象在发生改变时,比如setXXX 方法改变对象内容时,会在最后,即提交事务时统一进行更新操作,而并非每一次改变就执行一次更新,这样可以保证与数据库的交互更高效合理)。当执行完save 方法后,我们关闭数据库连接时,这时的user 对象就是脱管状态,因为它在数据库有数据与之对应 而脱管状态的最好例子是当我们用get 方法得到一个对象并关闭连接时

补充说明: 既然我们已经知道了持久对象可以被Hibernate 检测到进行更新操作,那么update 是否还有用了?有,比如脱管对象就可以调用update 来更新数据库中的数据,而调用update() 方法后的脱管对象又变成了持久对象。 下面是三种对象状态相互转换的图例

 

 
再谈saveOrUpdate 方法 :此方法兼具了saveupdate 两种方法。它根据传递的参数来选择执行其中的一种方法。如果参数对象是瞬时态,则执行save 方法,而如果参数对象是脱管态,则执行update 方法。最终都是把传递的参数对象转成持久态。        如何判断对象的状态?主要依据是看:实体对象id (或者version )取值与实体配置文件中<id> 元素的unsaved-value 属性值的匹配情况。 只要满足下面的任一情况则可以说明对象处在瞬时态:情况一 ,实体对象(持久化对象)的id 取值为null 形式(比如int 型为0, 字串为null )。 情况二 ,实体对象(持久化对象)的id 取值与预设的unsaved-value 属性值不同。 情况三 ,实体对象(持久化对象)的具有的versionn 属性,并且为null情况四 ,实体对象(持久化对象)的version 取值与预设的unsaved-value 属性值不同。

  • 大小: 41.8 KB
分享到:
评论

相关推荐

    Hibernate 对象的状态检索

    本人在厦门邦初培训时候 使用的快速入门精简文档 ...对象的临时状态、持久状态和游离状态 用session的update()方法使游离对象转变为持久化对象。 延迟装载 迫切左外链接 HQL检索方式 QBC检索方式 本地SQL检索方式

    经典hibernate教程,从入门到精通

    经典hibernate教程,从入门到精通经典hibernate教程,从入门到精通经典hibernate教程,从入门到精通经典hibernate教程,从入门到精通经典hibernate教程,从入门到精通经典hibernate教程,从入门到精通经典hibernate教程,从...

    Hibernate入门文档

    Hibernate 难点解析: hibernate中uuid和native的相关总结 Hibernate get与load的区别 hibernate二级缓存中list和...Hibernate中的对象有三种状态: lock和update区别 save 和update区别 update 和saveOrUpdate区别

    对象-关系映射—Hibernate 培训 (中文)

    对象-关系映射—Hibernate 培训 (中文) 目录 一、持久化层-O/R Mapping 二、Hibernate入门 三、Hibernate映射申明(Mapping declaration...四、持久化对象的状态和生命周期 五、Hibernate查询 六、Hibernate最佳实践

    Hibernate学习笔记和资料

    hibernate概述,hibernate入门Demo,hibernate配置文件详解(全局配置,实体类映射配置),配置实体规则,核心API详解(Configuration,sessionFactory,session,Transaction),hibernate中的对象状态以及刷新能缓存机制 ...

    Hibernate 对象持久化

    一份我在厦门邦初学习 的快速入门ppt 内容有: 对象持久化基础知识 ...对象的状态 Hibernate的检索策略 Hibernate检索数据的方式 数据库事务与并发处理 组件及组成关系映射 综合项目应用:Struts+Hibernater

    Hibernate培训

    一、持久化层-O/R Mapping 二、Hibernate入门 三、Hibernate映射申明(Mapping declaration) 四、持久化对象的状态和生命周期 五、Hibernate查询 六、Hibernate最佳实践

    传智播客李勇hibernate源码1-20课

    05_实体对象的三种状态与saveOrUpdate方法 06_完善HibernateUtil类及hql查询入门 07_实体类或属性名与数据库关键字冲突问题 10_使用Hibernate完成CRUD实验的步骤说明 11_完成CRUD实验并回顾和补充细节知识(上)...

    Hibernate3 学习笔记.ppt

    Hibernate3 学习笔记....二、Hibernate入门 三、Hibernate映射申明(Mapping declaration) 四、Hibernate Annotations 五、持久化对象的状态和生命周期 六、Hibernate查询 七、Hibernate最佳实践 八、Hibernate Tool

    Hibernate

    Hibernate 培训课件 一、持久化层-O/R Mapping 二、Hibernate入门 三、Hibernate映射申明(Mapping declaration) 四、持久化对象的状态和生命周期 五、Hibernate查询 六、Hibernate最佳实践

    Hibernate+中文文档

    1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第...

    培训教程-hibernate ppt doc

    目录 一、持久化层-O/R Mapping 二、Hibernate入门 三、Hibernate映射申明(Mapping declaration) 四、持久化对象的状态和生命周期 五、Hibernate查询 六、Hibernate最佳实践

    HibernateAPI中文版.chm

    1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第...

    hibernate3.2中文文档(chm格式)

    1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第...

    Hibernate中文详细学习文档

    1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第...

    Hibernate 中文 html 帮助文档

    1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第...

    hibernate+中文api

    1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第...

    hibernate 体系结构与配置 参考文档(html)

    1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第...

    Hibernate教程

    2. Hibernate入门 2.1. 前言 2.2. 第一部分 - 第一个Hibernate程序 2.2.1. 第一个class 2.2.2. 映射文件 2.2.3. Hibernate配置 2.2.4. 用Ant编译 2.2.5. 安装和帮助 2.2.6. 加载并存储对象 2.3. 第二部分 ...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第...

Global site tag (gtag.js) - Google Analytics