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
方法
:此方法兼具了save
和update
两种方法。它根据传递的参数来选择执行其中的一种方法。如果参数对象是瞬时态,则执行save
方法,而如果参数对象是脱管态,则执行update
方法。最终都是把传递的参数对象转成持久态。
如何判断对象的状态?主要依据是看:实体对象id
(或者version
)取值与实体配置文件中<id>
元素的unsaved-value
属性值的匹配情况。 只要满足下面的任一情况则可以说明对象处在瞬时态:情况一
,实体对象(持久化对象)的id
取值为null
形式(比如int
型为0,
字串为null
)。 情况二
,实体对象(持久化对象)的id
取值与预设的unsaved-value
属性值不同。 情况三
,实体对象(持久化对象)的具有的versionn
属性,并且为null
。 情况四
,实体对象(持久化对象)的version
取值与预设的unsaved-value
属性值不同。
- 大小: 41.8 KB
分享到:
相关推荐
#### 三、Hibernate入门 - **概念理解**:首先需要理解Hibernate的基本概念,包括Session、SessionFactory、Transaction等核心组件的作用。 - **环境搭建**:配置开发环境,包括安装必要的库文件(如Hibernate核心...
Hibernate是一种流行的Java ORM(对象关系映射)框架,它用于在Java应用程序和关系数据库之间提供一个桥梁。其主要目标是简化数据库相关的操作,减少开发人员直接使用JDBC API的工作量。通过Hibernate,开发者可以以...
11. **实体状态管理**: Hibernate管理实体的瞬时态、持久态、游离态三种状态,理解这些状态有助于优化数据操作。 12. **事务处理**: Hibernate支持JTA和JDBC两种事务处理方式,保证数据的一致性和完整性。 **从...
**hibernate入门小程序** Hibernate 是一款开源的对象关系映射(ORM)框架,它为Java开发者提供了方便的数据持久化服务,使得开发人员可以使用面向对象的方式来操作数据库,而无需过多地关注SQL语句的编写。在...
《Hibernate 手册 第一章 Hibernate入门》 Hibernate 是一个开放源码的Java持久化框架,它为Java开发者提供了一种对象关系映射工具来管理Java应用中的关系数据。本章将带你逐步走进Hibernate的世界,了解其基本概念...
本人在厦门邦初培训时候 使用的快速入门精简文档 ...对象的临时状态、持久状态和游离状态 用session的update()方法使游离对象转变为持久化对象。 延迟装载 迫切左外链接 HQL检索方式 QBC检索方式 本地SQL检索方式
经典hibernate教程,从入门到精通经典hibernate教程,从入门到精通经典hibernate教程,从入门到精通经典hibernate教程,从入门到精通经典hibernate教程,从入门到精通经典hibernate教程,从入门到精通经典hibernate教程,从...
4. **持久化对象状态**:Hibernate管理对象的三种状态:瞬时态、持久态和脱管态。理解这些状态对于优化代码至关重要,因为它影响了数据的保存和加载方式。 5. **缓存机制**:Hibernate内置了一级缓存和二级缓存。一...
【hibernate入门与概述】 Hibernate 是一个流行的Java对象关系映射(ORM)框架,它允许开发者使用面向对象的方式操作数据库,将Java类与数据库表进行映射,从而简化数据库操作。本文主要涵盖以下几个核心概念: 1....
五、对象状态与操作 在Hibernate中,对象有三种状态:瞬时态、持久态和脱管态。瞬时态对象未与数据库关联,持久态对象已与数据库记录绑定,而脱管态对象曾是持久态但当前未被Session管理。通过Session的save()、...
**标题:“Hibernate入门”** **概述:** Hibernate 是一个开源的对象关系映射(ORM)框架,它为Java开发者提供了一种在关系数据库上操作对象数据的便捷方式。它简化了数据库编程,允许开发者通过Java对象来操作...
【hibernate入门PPT】深入解析 hibernate是一个流行的开源对象-...在学习过程中,了解O/R Mapping的基本原则,熟悉Hibernate的映射机制,掌握对象状态管理和查询方法,将有助于在实际项目中得心应手地使用Hibernate。
关联映射是Hibernate的一大特色,包括一对一、一对多、多对一和多对多四种类型。这些映射允许我们建立对象间的复杂关系,并在数据库中自动维护这些关系。例如,一个用户可以有多个订单,订单也可以属于多个用户,...
【Hibernate入门】章节主要介绍了Hibernate的基本概念和配置,以及如何开始使用Hibernate进行开发。Hibernate是一个流行的Java持久化框架,它的核心功能是实现对象关系映射(Object-Relational Mapping,简称ORM),...
### Hibernate教程1_从入门到精通 #### 一、ORM概念及Hibernate的作用 - **ORM (Object Relational Mapping)**: 是一种将程序中的对象模型与数据库中的关系模型相互转换的技术。这种技术允许开发者以面向对象的...
在这个“hibernate入门的小例子”中,我们将探讨如何利用Hibernate进行基本的数据操作,包括实体类的创建、配置文件的设定、Session的使用以及查询操作。 1. **实体类的创建**: 在Hibernate中,实体类是代表...
Hibernate中的对象有四种状态:瞬时态、持久态、托管态和删除态。理解这些状态对于管理和跟踪对象的生命周期至关重要。同时,文档《Hibernate对象状态及一对多关联.doc》详细介绍了如何设置和管理一对多关联,这种...