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
分享到:
相关推荐
本人在厦门邦初培训时候 使用的快速入门精简文档 ...对象的临时状态、持久状态和游离状态 用session的update()方法使游离对象转变为持久化对象。 延迟装载 迫切左外链接 HQL检索方式 QBC检索方式 本地SQL检索方式
经典hibernate教程,从入门到精通经典hibernate教程,从入门到精通经典hibernate教程,从入门到精通经典hibernate教程,从入门到精通经典hibernate教程,从入门到精通经典hibernate教程,从入门到精通经典hibernate教程,从...
Hibernate 难点解析: hibernate中uuid和native的相关总结 Hibernate get与load的区别 hibernate二级缓存中list和...Hibernate中的对象有三种状态: lock和update区别 save 和update区别 update 和saveOrUpdate区别
对象-关系映射—Hibernate 培训 (中文) 目录 一、持久化层-O/R Mapping 二、Hibernate入门 三、Hibernate映射申明(Mapping declaration...四、持久化对象的状态和生命周期 五、Hibernate查询 六、Hibernate最佳实践
hibernate概述,hibernate入门Demo,hibernate配置文件详解(全局配置,实体类映射配置),配置实体规则,核心API详解(Configuration,sessionFactory,session,Transaction),hibernate中的对象状态以及刷新能缓存机制 ...
一份我在厦门邦初学习 的快速入门ppt 内容有: 对象持久化基础知识 ...对象的状态 Hibernate的检索策略 Hibernate检索数据的方式 数据库事务与并发处理 组件及组成关系映射 综合项目应用:Struts+Hibernater
一、持久化层-O/R Mapping 二、Hibernate入门 三、Hibernate映射申明(Mapping declaration) 四、持久化对象的状态和生命周期 五、Hibernate查询 六、Hibernate最佳实践
05_实体对象的三种状态与saveOrUpdate方法 06_完善HibernateUtil类及hql查询入门 07_实体类或属性名与数据库关键字冲突问题 10_使用Hibernate完成CRUD实验的步骤说明 11_完成CRUD实验并回顾和补充细节知识(上)...
Hibernate3 学习笔记....二、Hibernate入门 三、Hibernate映射申明(Mapping declaration) 四、Hibernate Annotations 五、持久化对象的状态和生命周期 六、Hibernate查询 七、Hibernate最佳实践 八、Hibernate Tool
Hibernate 培训课件 一、持久化层-O/R Mapping 二、Hibernate入门 三、Hibernate映射申明(Mapping declaration) 四、持久化对象的状态和生命周期 五、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. 第...
目录 一、持久化层-O/R Mapping 二、Hibernate入门 三、Hibernate映射申明(Mapping declaration) 四、持久化对象的状态和生命周期 五、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. 第...
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. 第...
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. 第...
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. 第...
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. 第...
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. 第...
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. 第二部分 ...
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. 第...