Hibernate中对象的三个状态解析
Hibernate 将操作的对象分为三种状态:
1.
瞬时 (Transient )/临时状态/自由状态
持久 (Persistent)
脱管 (Detached)
瞬时对象特征:
第一、不处于 Session 的缓存中,也可以说,不被任何一个 Session 实例关联。
第二、在数据库中没有对应的记录。
持久化对象特征:
第一、持久化对象总是被一个 session 关联。
第二、持久化对象与数据库中的记录对应。
第三、Session清理缓存的时候,会根据持久化对象的改变,更新数据库。
托管对象特征:
第一、Session断开关联
第二、持有OID
2.三种状态的区别分析:
只要与session关联的就是持久态。
Session没关联,没有OID就是瞬时状态。
Session没关联,有OID的就是游离状态。
3.持久化对象状态的相互转换:
转换图:

瞬时对象:
如何直接获得 --- new 出来
转换到持久态 ---- save、saveOrUpdate 保存操作
转换到脱管态 ---- setId 设置OID持久化标识(这个id是数据库中存在的)
持久对象:
如何直接获得 ---- 通过session查询方法获得 get、load、createQuery、createCriteria
转换到瞬时态 ---- delete 删除操作 (数据表不存在对应记录 )(其实还有id,只是不叫OID)
转换到脱管态 ---- close 关闭Session, evict、clear 从Session清除对象
脱管对象:
如何直接获得 ----- 无法直接获得 ,必须通过瞬时对象、持久对象转换获得
转换到瞬时态 ---- 将id设置为 null,或者手动将数据库的对应的数据删掉
转换到持久态 ---- update、saveOrUpdate、lock (对象重新放入Session ,重新与session关联)
在Hibernate所有的操作只认OID,如果两个对象的OID一直,它就直接认为是同一个对象。
Hibernate中对象的三个状态解析的更多相关文章
- Hibernate中对象的三种状态及相互转化
1. 瞬时状态 (Transient) 当我们通过Java的new关键字来生成一个实体对象时,这时这个实体对象就处于自由状态,如下: Customer customer=new Customer(“ ...
- JavaWeb_(Hibernate框架)Hibernate中对象的三种状态
对象的三种状态 瞬时状态: 实体 没有id.没有与session关联 持久化状态: 特点:持久化状态对象的任何改变都会同步到数据库中 游离态[也称作托管态]: 实体 有id,没有与session关联 ...
- Hibernate中对象的三种状态以及Session类中saveOrUpdate方法与merge方法的区别
首先,用一张图说明一个对象,在Hibernate中,在调用了不同方法之后对象所处的不同状态 在Hibernate中,一个对象的状态可以被分为如图所示的三种 Transient:瞬时对象,该对象在数据库 ...
- Hibernate中对象的三种状态即save(),update(),saveOrUpdate()的使用【转】
当new一个user的时候,是处于瞬时状态 当调用session.save(user)的时候,user对象会放到session里,此时处于持久状态 当提交事务的时候,user对象才会存到DB中 当调用 ...
- hibernate - 一级缓存和三种状态解析
转载自:http://www.cnblogs.com/whgk/p/6103038.html 一.一级缓存和快照 什么是一级缓存呢? 很简单,每次hibernate跟数据库打交道时,都是通过sessi ...
- hibernate 中对象的3种状态总结
1.Hibernate把对象分文三种状态:Transient(临时状态).Persistent(持久化状态).Detached(游离状态). 1)Transient:刚刚new出来的对象,就是Tran ...
- Hibernate之对象的三种状态
Hibernate之Java对象的三种状态 一.简述 本博文大部分的思想和内容引子CSND上名为 FG2006 这位大神的文章,连接地址为:http://blog.csdn.net/fg2006/ar ...
- 关于hibernate中对象的三种状态分析
一,首先hibernate中对象的状态有三种:瞬态.游离态和持久态,三种状态转化的方法都是通过session来调用,瞬态到持久态的方法有save().saveOrUpdate().get().load ...
- Hibernate持久化对象的三种状态深入理解
关于OID hibernate缓存是一个map,他会根据OID作为缓存对象的key,我们的映射文件中<id>标签指定的属性值会作为OID 持久化对象的三种状态 为了方便理解,Hiberna ...
随机推荐
- appium踩过的坑(2):java.lang.NoSuchFieldError:INSTANCE
- jquery之右下角消息提示框
messager.js (function (jQuery) { var window; var obj = new Object(); obj.version = '@1.0'; obj.title ...
- jquery中是否加()的问题
自己总结的,慢慢修改再: 1带上()代表立即执行 去掉()代表当有事件发生的时候,我再执行
- 字符串s中从第i个位置起取长度为len的子串,函数返回子串链表
/*已知字符串采用带结点的链式存储结构(详见linksrting.h文件),请编写函数linkstring substring(linkstring s,int i,int len),在字符串s中从第 ...
- Block循环引用问题研究
自从苹果在objc中添加Block功能支持以后已经过了很久.目前网上对于Block的使用有很多介绍.不过对于Block的内存管理问题,则是众说纷纭.再加上objc开始使用ARC以后,对于Block的内 ...
- Mac电脑配置IOS React Native开发环境配置笔记
React Native(以下简称RN)的开发环境配置直接参考官方文档即可完成,不过对小白来说东西有点多,有些名词不是很好理解,这里就官方的安装文档稍微展开说一下. 中文版配置说明:不错的中文说明.官 ...
- HTML的ul和li标签的使用
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- 关于合并“.a”文件时遇到的问题
今天在给工程添加百度地图SDK时,涉及到百度地图的模拟器与真机环境下的.a文件的合并,在使用终端进行 合并时,出现: xcrun: error: active developer path (&quo ...
- Bootstrap库之Modals
Bootstrap库之Modals. Bootstrap是Twitter推出的一个开发工具包,包含了一些比较常用的CSS,JavaScript代码.使用Bootstrap可以加快前端开发的速度.本站( ...
- Extjs的js函数
在Extjs内部使用函数的时候,由于我本身没有真正学过原生的js,所以对于一些函数的写法及用法很生疏,所以用起来很不方便,经常给自己弄出很多莫名其妙的bug, 比如当写了一个button,然后为其添加 ...