当前位置: 首页 > article >正文

Hibernate的一级缓存是什么?具有哪些特点?

Hibernate中的缓存分为一级缓存和二级缓存,这两个级别的缓存都位于持久化层,并且存储的都是数据库数据的备份。图1-6为Hibernate提供的两种缓存,两者区别如下:

  1.一级缓存:一级缓存本质上是自带的不可卸载的,一级缓存的生命周期与session是一致的,一级缓存称为session级别的缓存。

  2.二级缓存:默认没有开启,是需要手动配置才可以使用的。二级缓存的优势在于可以在多个session中共享数据,二级缓存称为是sessionFactory级别的缓存。

  图1-6 Hibernate提供的两种缓存

  一级缓存其实就是Session缓存。Session缓存是一块内存空间,用于存储与管理Java对象。在使用Hibernate查询对象时,首先会使用对象的OID值在Hibernate的一级缓存中查找,如果找到匹配的对象,则直接将该对象从一级缓存中取出使用;如果没有找到匹配的对象,则会去数据库中查询对应的数据。当从数据库中查询到所需数据时,该数据信息会存储到一级缓存中。由此可知,Hibernate一级缓存的作用就是减少对数据库的访问次数。

  Hibernate的一级缓存具有如下特点。

  ·当应用程序调用Session接口的save()、update()、saveOrUpdate时,如果Session缓存中没有相应的对象,则Hibernate就会自动把从数据库中查询到的相应对象信息加入到一级缓存中。

  ·当调用Session接口的load()、get()方法,以及Query接口的list()、iterator()方法时,会判断缓存中是否存在该对象,有则返回,不会查询数据库,如果缓存中没有要查询的对象,则再去数据库中查询对应对象,并添加到一级缓存中。

  ·当调用Session的close()方法时,Session缓存会被清空。

  ·Session能够在某些情况下,按照缓存中对象的变化,执行相关的SQL语句同步更新数据库,这一过程被称为刷出缓存(flush)。

  在默认情况下,Sesssion在如下几种情况中会刷出缓存。

  (1)当应用程序调用Transaction的commit()方法时,该方法先刷出缓存(调用session.flush()方法),然后再向数据库提交事务(调用commit()方法)。

  (2)当应用程序执行一次查询操作的时候,如果缓存中持久化对象的属性已经发生了变化,会先刷出缓存,以保证查询结果能够反映持久化对象的最新状态。

  (3)调用Session的flush()方法。


http://www.kler.cn/a/8035.html

相关文章:

  • Nuxt.js 应用中的 schema:beforeWrite 事件钩子详解
  • 2023年MathorCup数学建模B题城市轨道交通列车时刻表优化问题解题全过程文档加程序
  • 分布式锁实践方案
  • 执行flink sql连接clickhouse库
  • Go语言 实现将中文转化为拼音
  • Kafka - 启用安全通信和认证机制_SSL + SASL
  • Linux系统编程(三)—— 文件编程(1)目录和文件
  • Python 常函数
  • 00后也太卷了吧!进厂起薪18K,原来面试时候都说了这些......
  • 操作技巧 | Revit中如何新建系统类型并赋予颜色?
  • PTA L1-003 个位数统计(15分)C语言
  • 每日做题总结——day01
  • 分布式锁介绍及解决方案
  • 【Java实战篇】Day6.在线教育网课平台
  • chrome中debugger调试定位不准确
  • CASE WHEN函数语句多条件下使用详解
  • 射频识别(RFID)技术的基本原理、特性、发展和应用
  • 请问网络安全员,渗透师,和黑客三者是什么关系?
  • 深入了解jvm垃圾回收
  • 关于函数torch.topk用法的思考
  • axios 导出excel表格 文件流格式
  • Alibaba开源的Java诊断工具Arthas-实战
  • [ 应急响应基础篇 ] 解决远程登录权限不足的问题(后门账号添加远程桌面权限)
  • 华为OD机试-组合出合法最小数-2022Q4 A卷-Py/Java/JS
  • 深入浅出Kafka
  • Linux账号管理(用户{创建删除修改}用户组{创建删除修改}一般用户命令{id,finger,chfn,chsh})