Hibernate持久化对象的三种状态深入理解
关于OID
hibernate缓存是一个map,他会根据OID作为缓存对象的key,我们的映射文件中<id>标签指定的属性值会作为OID
持久化对象的三种状态
为了方便理解,Hibernate为持久化对象定义了三个状态:
瞬时态:没有持久化标识OID,没有被纳入Session对象的管理
持久态:有持久化标识OID,已经被纳入Session对象的管理
托管态:有持久化标识OID,但没有被Session对象管理
用一个小示例来演示:
持久态的一个常见误解
需要注意的是,被纳入session对象的管理的持久态对象,仅仅是放入了session的一级缓存,却不一定会同步到数据库。(session中有一个PersistenceContext对象,本质就是一个map集合,一级缓存的数据就存在这里),如下图所示。
user被赋予了id
由上图可知,当执行到save()操作时,user已经被放到session中管理,并且已经拥有了id值,此时user是持久态的,但是现在数据库里并没有user的数据,因为还没有提交事务,所以持久态的对象并不一定就存在于数据库中。
关于持久态对象自动更新的能力
当在一个session中,对一个持久态的对象进行修改后,即使不执行update()方法,在事务提交时,也会会自动将修改后的数据同步到数据库。实现原理如下图:
这种机制实现的原理就是,session除了一级缓存区域,还有一个快照区域,当持久态对象第一次被放入一级缓存时,同时会在快照区域放一个这个对象的副本。如果接下来对对象进行了修改操作,一级缓存的数据会同时修改,但快照区域的对象不变。在事务提交时,会对这两个区域中的对象进行对比,如果相同,说明没有修改,直接提交。如果不同,会对改变的几个属性进行更新操作。
转载于:https://www.cnblogs.com/luminqiang/p/7883044.html
Hibernate持久化对象的三种状态深入理解相关推荐
- hibernate中对象的三种状态瞬时态,持久态,游离态区分
1.瞬时态. hibernate中什么时候的对象为瞬时态呢,当我们new 一个对象时,还没有save时,它就是瞬时态的,当我们delete一个对象时,它也是瞬时态了,因为此时,他们在数据库中没有对应 ...
- 菜鸟学SSH(八)——Hibernate对象的三种状态
前面写了几篇关于SSH的博客,但不是Struts就是Spring,Hibernate还从来没写过呢.说好是SSH的,怎么可以光写那两个,而不写Hibernate呢对吧.今天就先说说Hibernate对 ...
- Hibernate 对象的三种状态
Hibernate 对象的三种状态 瞬时(transient): 由new操作符创建,且尚未与Hibernate Session关联的对象被认定为瞬时(Transient)的.瞬时(Transient ...
- Hibernate——(3)主键生成策略持久化类的三种状态
一 持久化类 1.持久化:内存对象--->数据库(硬盘)Hibernate持久化的框架 持久化类:Java对象与数据库中的表建立映射关系 Hibernate就称为持久化类( ...
- Hibernate对象的三种状态(瞬时态,持久态,游离态)
1. 瞬时状态 (瞬态) 当我们通过Java的新的关键字来生成一个实体对象时,这时这个实体对象就处于自由状态,如下: 客户客户=新客户("zx",27,图片); 这时客户对象就 ...
- 【Hibernate框架开发之五】Hibernate对象的三种状态Session常用方法
1. Hibernate对象的三种状态:(图解如下:) 如图所示,Hibernate对象有三种状态,1.Transient 2.Persistent 3.Detached; 三种状态的区别如下: 1 ...
- hibernate中对象的3种状态----瞬时态、持久态、脱管态
转载: http://www.blogjava.net/amigoxie/archive/2007/02/11/99342.html Hibernate的对象有3种状态,分别为:瞬时态(Transie ...
- Java中对象的三种状态
转载自 Java中对象的三种状态 Java中的对象的三种状态是和垃圾回收紧密相关的,因此有必要深究. 状态一:可触及态:从根节点开始,可以搜索到这个对象,也就是可以访问到这个对象,也有人将其称为可 ...
- java三态_Java中对象的三种状态
Java中的对象的三种状态是和垃圾回收紧密相关的,因此有必要深究. 状态一:可触及态:从根节点开始,可以搜索到这个对象,也就是可以访问到这个对象,也有人将其称为可达状态. 状态二:可复活态:从根节点开 ...
最新文章
- 十进制度转换为度分秒
- WPF里ItemsControl的分组实现
- hive 的udf 函数使用
- sqlsourcesafe mysql_mysql权限问题,看不到其它的库!
- java消息推送与接收
- LeetCode 343. 整数拆分(DP)
- Spring Batch 批量处理策略
- php 三色排序,一个数组中只有0,1,2三种元素,要求对这样的数组进行排序,一个数组中只有0,1,2三种元素,要求对这样的数组进行排序,第2章 排序 | | 第17节 三色排序练习题...
- 我为何不再愿意打一份朝九晚五的工?
- js forEach跳出循环
- iOS底层探索之类的结构(上):ISA
- 浅谈App Hybrid混合开发的五种方案
- SSRS----Report Builder 同时冻结首行和前两列的一种方法
- 凸集(Convex sets)
- 创新工场投资经理:创业就是九死一生
- mysql MMM详解
- 第二章 04 魔镜世界
- HashMap源码逐行分析
- s5pv210 i2c 时序
- 手工释放cache内存