Hibernate session缓存理解

Session 缓存概述
Session级别的缓存是Hibernate的一级缓存,主要提供事务级别的缓存处理,用来提高访问数据库的性能等.

在Session的接口实现中包含一系列的java集合,这些集合构成了Session的缓存.

只要Session实例没有结束生命周期,存放在它缓存中的对象也不会结束生命周期.

当Session 通过save()方法持久化一个对象时,这个对象被加入到Session缓存中去, 这以后,只要缓存没有被清空,这个对象就被存储在Session的集合对象中,即存在于缓存之中.

当Session 通过get()方法试图从数据库中得到一个对象时, Session会先判断这个对象是否已经存在与缓存中, 如果存在这从缓存中获得, 从而避免访问数据库, 提高了性能.

Session 缓存的作用 

(1) 减少访问数据库的频率.

(2) 当缓存中的持久化对象之间存在循坏关联关系时,Session会保证不出现访问对象图的死循环, 以及由死循环引起的JVM堆栈溢出异常.

(3) 保证数据库中的相关记录和缓存中相应的对象保持同步.
Note: Session 在清理缓存的时候,会自动进行脏检查, 如果发现Session缓存中的对象和数据库的不一致,则会根据对象的最新属性去同步更新数据库.

 

脏检查及清理缓存的机制

当一个对象被加入到Session的缓存中的时候,Session 会为这个对象复制一份快照, 当session 清理缓存的时候, 将用最新的对象和快照进行对比来判断对象是否经过了更新, 然后根据脏对象的最新属性生成相关SQL语句 更新数据库.

 

Session 清除缓存的默认时间点

 

(1) 当程序调用hibernate Transaction的commit()方法的时候, commit方法先清理缓存(调用Session的 flush()方法), 然后再向数据库提交事务.

 

(2) 当程序执行一些查询操作的时候, 如果缓存中的持久化对象属性以及发生了变化, 就会先清理缓存, 使得缓存与数据库进行同步.

 

(3) 当程序显示的调用Session的 flush方法的时候.

 

 

如果不希望Session 在以上默认的时间点进行缓存的清理, 也可以通过Session 的 setFlushMode()方法来显示的设定删除的时间点.

FlushMode 类定义了3种不同的清理模式: FlushMode.AUTO, FlushMode.COMMIT和FlushMode.NEVER.

 

清理缓存的模式各种查询方法Transaction的commit()方法Session的flush()方法
FlushMode.AUTO(默认)清理清理清理
FlushMode.COMMIT不清理清理清理
FlushMode.NEVER不清理不清理清理

 

 

 

 

 

 

 

 Flush()方法适用场合

(1) 插入,删除或更新某个持久化对象会引发数据库的触发器.

 

(2) 在应用程序中混合使用hibernaye API和JDBC API.

 

(3) JDBC驱动程序不健壮, 自动清理模式中无法正常清理.

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值