关于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 ...
随机推荐
- C#多线程lock解决数据同步
1.代码实例: public class ThreadTest4 { public static void Init() { //多个线程修改同一个值,使用lock锁解决并发 ; i < ; i ...
- (转)dedecms入门
学dedecms一段时间了,把我的入门体会和大家分享一下. 什么是dedecm cms(内容管理系统):现在有各种内容模型,如书评(包括书名,出版社,评论等字段).cms一般有用户后台,网页的用户可以 ...
- 开始Swift之旅 - HelloWorld
//: Playground - noun: a place where people can play import UIKit var str = "Hello, playground& ...
- Java中异常的基本应用(一)
在Java中,我们把异常当做一种对象来处理,正是异常机制的引入,使得我们的程序更加健壮.异常指示了一个不正常的条件,或者一个错误条件,简单地说就是一个中断了正常的指令流的事件.程序控制将无条件的抛至一 ...
- C++变量的“总分性”(Mereology)
Stroustrup 在自传中说自己在哲学上深受 Kierkegaard (吉爾凱高爾)的影响,而讨厌黑格尔.所以看 Stroustrup 的书,很少感受到抽象理论的重要性.这也影响了C++的文化:许 ...
- 如何遍历json属性和动态添加属性
var person= { name: 'zhangsan', pass: '123' , 'sni.ni' : 'sss', hello:function (){ for(var i=0;i< ...
- 基于VC的串行通信技术应用实例
在工业控制中,串口是常用的计算机与外部串行设备之间的数据传输通道,由于串行通信方便易行,所以应用广泛. 本文将介绍在Windows平台下串行通信的工作机制和用Visual C++设计串行通信程序的 ...
- 【jquery学习笔记】关于$(window),$("html,body").scroll()的在不同浏览器的不同反应
已经很几次碰到了这种问题, 例子: $(window).scroll(function(){ var num=$(window).scrollTop(); //之前的写法是$ ...
- [javascript]事件冒泡处理
<!DOCTYPE html> <html> <head> <style type="text/css"> #box1 { widt ...
- centos 下搭建 php环境(2) mysql 安装
CentOS下的MySQL 5.1安装 01 1.下载源码包 wget http://mysql.llarian.net/Downloads/MySQL-5.1/mysql-5.1.63.tar. ...