脏检查and刷新机构
2020-04-01 12:29
58 查看
---恢复内容开始---
脏检查:当食物提交时,Hiberante会对Session中持久状态的对象进行加测,判断对象的数据是否发生了变化
为什么要进行脏检查?,
解析:如果对象发生了改变,就需要将改变更新到数据库中,以确保内存中的对象与数据库中的数据保持一致。
如何脏检查?
解析:当一个Dept对象被加入到Session缓存(有人又称为 一级缓存 后者是内部缓存)中时,Session会为Dept对象的值类型的属性复制一份快照。当Session刷新缓存时,会先进行脏检查,即比较Dept对象的当前属性与它的快照,来判断Dept对象的属性是否发生了变化。如果发生了变化,Session会根据脏对象的最新属性值来执行相关的SQL语句,将变化更新到数据库中。
缓存清理机制
当Session缓存中对象的属性每次发生了变化,Session并不会立即清理缓存和执行相关的SQL update语句,而是在特定的时间点才清理缓存,这使得Session能够把几条相关的SQL语句合并为一条SQL语句,一遍减少访问数据库的次数,从而提高应用程序的数据访问性能。
在默认情况下,Session会在以下时间点清理缓存。
- 当应用程序调用org.hibernate.Transaction的commit()方法的时候.commit方法先清理缓存,然后再向数据库提交事务。Hibernate之所以把清理缓存的时间点安排在事务快结束时,一方面是因为可以减少访问数据库的频率,还有一方面是因为可以尽可能缩短当前事务对数据库中相关资源的锁定时间。
- 当应用程序执行一些查询操作时,如果缓存中持久化对象的属性已经发生了变化,就会清理缓存,使得Session缓存与数据库已经进行了同步,从而保证查询结果返回的是正确的数据。
- 当应用程序显示调用Session的flush()方法的时候。
Session进行清理缓存的例外情况是,如果对象使用native生成器来生成OID,那么当调用Session的save()方法保存该对象时,会立即执行向数据库插入该实体的insert语句。
注意:Session的commot()和flush()方法的区别。flush方法进行清理缓存的操作,执行一系列的sql语句,但不会提交事务。
转载于:https://www.cnblogs.com/hero96/p/5817994.html
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 检查类修饰符和类型(Examining Class Modifiers and Types)
- IE/Firefox每次刷新时自动检查网页更新,无需手动清空缓存的设置方法(转)
- 刷新SQL Server所有视图、函数、存储过程 更多 sql 此脚本用于在删除或添加字段时刷新相关视图,并检查视图、函数、存储过程有效性。 [SQL]代码 --视图、存储过程、函数名称 DECLARE @NAME NVARCHAR(255); --局部游标 DECLARE @CUR CURSOR --自动修改未上状态为旷课 SET @CUR=CURSOR SCROLL DYNAMIC FO
- 脏检查及刷新缓存机制
- 可以下拉刷新、上拉获取更多的SwipeRefreshAndLoadLayout
- ABAP检查日期and时间合法性的函数
- 学习aiax(javascript)--页面无刷新用ajax检查用户名是否已注册(POST方式)
- window.opener.location.reload() and href()的区别 弹出页修改后刷新父窗体
- Hibernate 脏检查和刷新缓存机制
- 检查和修复mysql表:mysql table is marked as crashed and last (automatic?) repair failed
- IE/Firefox每次刷新时自动检查网页更新,无需手动清空缓存的设置方法
- window.opener.location.reload() and href()的区别 弹出页修改后刷新父窗体
- Hibernate 脏检查和刷新缓存机制
- 大数据早报:美信用评级机构Equifax再遭黑客入侵 迪拜机场拟取消普通护照检查,全面采用人脸识别技术(10.17)
- 安装解压版本的MySQL,安装过程中的常见命令,检查windows系统错误日志的方式来检查MySQL启动错误,关于Fatal error: Can't open and lock privilege
- Chapter 4 | Trees and Graphs--检查一棵树是否平衡以及判断一棵树是否为平衡二叉树
- Double-checked locking and the Singleton pattern--双重检查加锁失效原因剖析
- Hibernate 脏检查和刷新缓存机制
- Simple Java—Strings and Arrays(五)如何在java中有效率的检查一个数组中是否有某值?
- IE/Firefox每次刷新时自动检查网页更新,无需手动清空缓存的设置方法(转)