关于Hibernate脏检查与快照
脏检查
Session到底是如何进行脏检查的呢?当一个Customer对象被加入到Session缓存中时,
Session会 为Customer对象的值类型的属性复制一份快照。当Session清理缓存时,会
先进行脏检查,即比较Customer对象的当前属性与它的快照,来 判断Customer对象的
属性是否发生了变化,如果发生了变化,就称这个对象是“脏对象”,Session会根据
脏对象的最新属性来执行相关的SQL语 句,从而同步更新数据库。 缓存清理机制 当
Session缓存中对象的属性每次发生了变化,Session并不会立即 清理缓存和执行相关
的SQL update语句,而是在特定的时间点才清理缓存,这使得 Session能够把几条相关
的SQL语句合并为一条SQL语句,一遍减少访问数据库的次数,从 而提高应用程序的数据
访问性能。 在默认情况下,Session会在以下时间点清理缓存。 1. 当应用程序 调用
org.hibernate.Transaction的commit()方法的时候.commit方法先清理缓存,然后再
向数据库提交事务。 Hibernate之所以把清理缓存的时间点安排在事务快结束时,一方
面是因为可以减少访问数据库的频率,还有一方面是因为可以尽可能缩短当前事务对数
据 库中相关资源的锁定时间。 2. 当应用程序执行一些查询操作时,如果缓存中持久
化对象的属性已经发生了变化,就会清理缓存,使得Session缓存与数据库已经进行了同
步,从而保证查询结果返回的是正确的数据。 3. 当应用程序显示调用Session的flush
()方法的时候。 Session进行清理缓存的例外情况是,如果对象使用native生成器来生
成OID,那么当调用Session的save()方法保存该对象时,会立即执行向数据库插入该实体的insert语句。
看图说话:

关于Hibernate脏检查与快照的更多相关文章
- OID,主键生成策略,PO VO DTO,get和load区别,脏检查,快照,java对象的三种状态
主键生成策略 sequence 数据库端 native 数据库端 uuid 程序端 自动赋值 生成的是一个32位的16进制数 实体类需把ID改成String 类型 assigned 程序端 需手 ...
- Hibernate延迟加载、三种状态、脏检查 缓存
一.持久化对象的唯一标识 java中按内存地址不同区分同一个类的不同对象,关系数据库用主键区分同一条记录,Hibernate使用OID来建立内存中的对象和数据库中记录的对应关系 什么是OID? 解析: ...
- Hibernate[延迟加载] [三种状态] [脏检查] [缓存机制]
一.持久化对象的唯一标识 java中按内存地址不同区分同一个类的不同对象,关系数据库用主键区分同一条记录,Hibernate使用OID来建立内存中的对象和数据库中记录的对应关系 什么是OID? 解析: ...
- 脏检查and刷新机构
---恢复内容开始--- 脏检查:当食物提交时,Hiberante会对Session中持久状态的对象进行加测,判断对象的数据是否发生了变化 为什么要进行脏检查?, 解析:如果对象发生了改变,就需要将改 ...
- Hibernate——脏检查和缓存清理机制
Session到底是如何进行脏检查的呢? 当一个Customer对象被加入到Session缓存中时,Session会为Customer对象的值类型的属性复制一份快照.当Session清理缓存时,会先进 ...
- Hibernate 脏检查和刷新缓存机制
刷新缓存: Session是Hibernate向应用程序提供的操作数据库的主要接口,它提供了基本的保存,更新,删除和加载java对象的方法,Session具有一个缓存,可以管理和追踪所有持久化对象,对 ...
- java对象中的三种状态和脏检查及刷新缓存机制
瞬时状态 瞬时状态又称临时状态.如果java对象与数据库中的数据没有任何的关联,即此java对象在数据库中没有相关联的记录,此时java对象的状态为瞬时状态,session对于 瞬时状态的ava对象是 ...
- AngularJS 脏检查深入分析
写在开头 关于Angular脏检查,之前没有仔细学习,只是旁听道说,Angular 会定时的进行周期性数据检查,将前台和后台数据进行比较,所以非常损耗性能. 这是大错而特错的.我甚至在新浪前端面试的时 ...
- Angular:手动脏检查/$apply/$digest和监控对象/$watch
声明:借鉴好多chm资料.视频.PDF总结如下: 一.$apply的引入 View <div ng-app=""> <div ng-controller=&quo ...
随机推荐
- Android - Layout时发生'Unfortunately xxx has stopped'
概述 我在进行LinearLayout和TableLayout的嵌套布局的时候,发生题的错误.如下布局xml代码: <LinearLayout xmlns:android="http: ...
- Android入门随记
1.Activity是通过startActivity()开始的,结束后不反回任何结果,而用startActivityForResult(Intent intent, int resquestCode) ...
- PAT-1041 Be Unique
Being unique is so important to people on Mars that even their lottery is designed in a unique way. ...
- 【USACO 1.5.3】特殊的质数肋骨
[题目描述]农民约翰的母牛总是生产出最好的肋骨.你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们. 农民约翰确定他卖给买方的是真正的质数肋骨,是因为从右边开始切下肋骨,每次还剩下的肋骨上的数 ...
- fragment中获取activity中的控件
- underscorejs-reject学习
2.9 reject 2.9.1 语法: _.reject(list, predicate, [context]) 2.9.2 说明: 前边我们已经学习了filter方法,那么我们在学习reject之 ...
- codevs 3269 混合背包
题目描述 Description 背包体积为V ,给出N个物品,每个物品占用体积为Vi,价值为Wi,每个物品要么至多取1件,要么至多取mi件(mi > 1) , 要么数量无限 , 在所装物品总体 ...
- 构建高可用web站点(四)
首先我们来了解负载均衡的概念:英文名称为Load Balance,其意思就是将负载(工作任务)进行平衡.分摊到多个操作单元上进行执行,例如Web服务器.FTP服务器.企业关键应用服务器和其它关键任务服 ...
- Acunetix Web Vulnerability Scanner Python辅助脚本
WvsScannerQueue.pyVersion: Python 2.7.* Acunetix Web Vulnerability Scanner 辅助Python脚本的第一个版本.功能:扫描URL ...
- 教你如何用Qt做透明的窗体,setMask, Opacity
// In this function, we can get the height and width of the current widgetvoid Widget::resizeEvent(Q ...