关闭

Hibernate——脏检查和缓存清理机制

500人阅读 评论(0) 收藏 举报

脏检查

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语句。

image

来源:《精通Hibernate: Java对象持久化技术详解(第2版)》孙卫琴:P184

0
0
查看评论

【Hibernate学习笔记】Session清空缓存与清理缓存

1. 清空缓存     当调用session.close()方法时,Session的缓存被清空。
  • xwz0528
  • xwz0528
  • 2014-04-17 20:27
  • 4386

Hibernate脏数据检查和缓存清理策略

简述 清理缓存: 对当前持久化状态的缓存数据进行检查,并且将有修改的数据持久化到数据库当中的过程称为“清理缓存”。清理缓存有一定的触发策略。 策略详解: 当一个对象在持久化的时候会添加到session缓存,缓存的同时Hibernate会自动存放一个与当前持久化对象相关的快照(暂时理解成当前持久化对象...
  • dreamwbt
  • dreamwbt
  • 2017-04-15 15:35
  • 391

Hibernate 脏检查和刷新缓存机制

刷新缓存:   Session是Hibernate向应用程序提供的操作数据库的主要接口,它提供了基本的保存,更新,删除和加载java对象的方法,Session具有一个缓存,可以管理和追踪所有持久化对象,对象和数据库中的相关记录对应,在某些时间点,Session会根据缓存中对象的变化来执行相关S...
  • qq_36074058
  • qq_36074058
  • 2017-09-23 19:35
  • 116

缓存清理策略

服务器,清理 虽然使用缓存思想似乎是一个很简单的事情,但是缓存机制却有一个核心的难点,就是——缓存清理。我们所说的缓存,都是保存一些数据,但是这些数据往往是会变化的,我们要针对这些变化,清理掉保存的“脏”数据,却可能不是那么容易。 首先我们来看看最简单的缓存数据——静态数...
  • a236209186
  • a236209186
  • 2016-06-21 19:10
  • 971

AngularJS的核心机制--脏检查

脏检查mvvmmvcmvvm m model v view vm view-model $scope双向数据绑定监听js里面值的变化:写一个循环执行的代码取一段时间去取一下值,看看变了没有 1.房贷计算器 车贷计算器 2.购物车 3.时间\人数 4.贵金属交易 有盘的这种,数据在实时...
  • angularWQ
  • angularWQ
  • 2017-03-09 11:05
  • 2161

Hibernate缓存非常烦人,想要最新数据连session.clear都不好使

一、hibernate一级缓存 (1)hibernate支持两个级别的缓存,默认只支持一级缓存; (2)每个Session内部自带一个一级缓存; (3)某个Session被关闭时,其对应的一级缓存自动清除; (4)save、update、saveOrupdate、load、get、list、...
  • u012643122
  • u012643122
  • 2015-08-12 01:21
  • 1574

Hibernate延迟加载、三种状态、脏检查 缓存

一、持久化对象的唯一标识 java中按内存地址不同区分同一个类的不同对象,关系数据库用主键区分同一条记录,Hibernate使用OID来建立内存中的对象和数据库中记录的对应关系 什么是OID? 解析:OID是持久化与数据表主键对应属性,用来区分持久化对象   ...
  • rookie_study
  • rookie_study
  • 2016-12-11 14:59
  • 546

清理linux内存cache

1.top中的buffers和cached cached缓存了对文件的读写,buffers缓存了inode,dentry等文件系统metadata。显然,metadata大小远远小于文件内存,所以buffers一般也远小于cached。cached的部分叫page cache,buffers的部分叫...
  • zhanngle
  • zhanngle
  • 2016-03-16 17:23
  • 1230

Hibernate缓存机制之快照

Hibernate缓存机制之快照(1)、快照是数据的副本 (2)、快照属于一级缓存 (3)、快照是在堆内存中的 (4)、快照的作用:保证数据一致性 当执行`session.getTransaction().commit()时,Hibernate同时会清理session的一级缓存(fl...
  • leisure_life
  • leisure_life
  • 2017-03-18 18:13
  • 3070

使用脏检查机制实现数据的双向绑定

1.实现效果:input标签的值一变化,底下的p标签的内容就跟着变化。2.实现思路:首先,angular得把我的旧数据记下来的吧。angular的双向绑定依赖脏检查机制。为要双向绑定的数据进行注册,注册到$scope上。($scope是angular数据和模型之间的桥梁。)注册到$scope上的$$...
  • u014787301
  • u014787301
  • 2016-07-29 11:29
  • 875
    个人资料
    • 访问:190053次
    • 积分:3413
    • 等级:
    • 排名:第11648名
    • 原创:142篇
    • 转载:42篇
    • 译文:3篇
    • 评论:47条
    联系我

    Charles Dong

    WEBSITE:www.xingbod.cn

    GITHUB:
    https://github.com/charlesLucky

    GITBLOG:
    http://charleslucky.github.io

    BLOG:blog.xingbod.cn 

    EMAIL:charles@xingbod.cn 

    QQ:717608039

    微信

    我们都是有故事的人,如果觉得足够精彩,打赏一杯咖啡钱吧


    博客专栏
    最新评论