`
neeleon
  • 浏览: 183459 次
  • 性别: 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入门教程.pdf

    #### 三、Hibernate入门 - **概念理解**:首先需要理解Hibernate的基本概念,包括Session、SessionFactory、Transaction等核心组件的作用。 - **环境搭建**:配置开发环境,包括安装必要的库文件(如Hibernate核心...

    hibernate入门教程

    Hibernate是一种流行的Java ORM(对象关系映射)框架,它用于在Java应用程序和关系数据库之间提供一个桥梁。其主要目标是简化数据库相关的操作,减少开发人员直接使用JDBC API的工作量。通过Hibernate,开发者可以以...

    hibernate官方入门教程 (转载)

    11. **实体状态管理**: Hibernate管理实体的瞬时态、持久态、游离态三种状态,理解这些状态有助于优化数据操作。 12. **事务处理**: Hibernate支持JTA和JDBC两种事务处理方式,保证数据的一致性和完整性。 **从...

    hibernate入门小程序

    **hibernate入门小程序** Hibernate 是一款开源的对象关系映射(ORM)框架,它为Java开发者提供了方便的数据持久化服务,使得开发人员可以使用面向对象的方式来操作数据库,而无需过多地关注SQL语句的编写。在...

    Hibernate 手册 第一章 Hibernate入门

    《Hibernate 手册 第一章 Hibernate入门》 Hibernate 是一个开放源码的Java持久化框架,它为Java开发者提供了一种对象关系映射工具来管理Java应用中的关系数据。本章将带你逐步走进Hibernate的世界,了解其基本概念...

    Hibernate 对象的状态检索

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

    03_传智播客hibernate教程_hibernate入门案例的代码优化

    4. **持久化对象状态**:Hibernate管理对象的三种状态:瞬时态、持久态和脱管态。理解这些状态对于优化代码至关重要,因为它影响了数据的保存和加载方式。 5. **缓存机制**:Hibernate内置了一级缓存和二级缓存。一...

    hibernate入门与概述

    【hibernate入门与概述】 Hibernate 是一个流行的Java对象关系映射(ORM)框架,它允许开发者使用面向对象的方式操作数据库,将Java类与数据库表进行映射,从而简化数据库操作。本文主要涵盖以下几个核心概念: 1....

    Hibernate入门(下)

    五、对象状态与操作 在Hibernate中,对象有三种状态:瞬时态、持久态和脱管态。瞬时态对象未与数据库关联,持久态对象已与数据库记录绑定,而脱管态对象曾是持久态但当前未被Session管理。通过Session的save()、...

    1.Hibernate入门

    **标题:“Hibernate入门”** **概述:** Hibernate 是一个开源的对象关系映射(ORM)框架,它为Java开发者提供了一种在关系数据库上操作对象数据的便捷方式。它简化了数据库编程,允许开发者通过Java对象来操作...

    hibernate入门PPT

    【hibernate入门PPT】深入解析 hibernate是一个流行的开源对象-...在学习过程中,了解O/R Mapping的基本原则,熟悉Hibernate的映射机制,掌握对象状态管理和查询方法,将有助于在实际项目中得心应手地使用Hibernate。

    hibernate入门精华

    关联映射是Hibernate的一大特色,包括一对一、一对多、多对一和多对多四种类型。这些映射允许我们建立对象间的复杂关系,并在数据库中自动维护这些关系。例如,一个用户可以有多个订单,订单也可以属于多个用户,...

    Hibernate入门

    【Hibernate入门】章节主要介绍了Hibernate的基本概念和配置,以及如何开始使用Hibernate进行开发。Hibernate是一个流行的Java持久化框架,它的核心功能是实现对象关系映射(Object-Relational Mapping,简称ORM),...

    hibernate入门的小例子.rar

    在这个“hibernate入门的小例子”中,我们将探讨如何利用Hibernate进行基本的数据操作,包括实体类的创建、配置文件的设定、Session的使用以及查询操作。 1. **实体类的创建**: 在Hibernate中,实体类是代表...

    北大青鸟Hibernate学习资料

    Hibernate中的对象有四种状态:瞬时态、持久态、托管态和删除态。理解这些状态对于管理和跟踪对象的生命周期至关重要。同时,文档《Hibernate对象状态及一对多关联.doc》详细介绍了如何设置和管理一对多关联,这种...

    hibernate入门文档

    ### Hibernate入门精要 #### Hibernate概述 Hibernate是一个开放源代码的ORM(Object Relational Mapping)框架,用于Java应用中实现数据库操作。它提供了一个高级的数据持久化层,简化了对象和关系型数据库之间的...

Global site tag (gtag.js) - Google Analytics