【Java】Hibernate的一级缓存

Session是有一个缓存, 又叫Hibernate的一级缓存

session缓存是由一系列的Java集合构成的。当一个对象被加入到Session缓存中,这个对象的引用就加入到了java的集合中,以后即使应用程序中的引用变量不再引用该对象,只要Session缓存不被清空,这个对象一直处于生命周期中。

例子:

结论: session有缓存,缓存里的对象,不会随着引用变量消失而清空! 只要缓存中已经存在的对象, 在查询的时候, Hibernate会优先从缓存中取出数据, 而不会再次去访问数据库, 只有缓存中不存在的数据, 才会去发起SQL语句查询数据库, 所以缓存极大的减少了访问数据库的频率。

Session缓存的作用:

  1. 减少访问数据库的频率。(被证实了)
  2. 保证缓存中的对象与数据库中的相关记录保持同步。

Hibernate提供了哪些方法去保证缓存中的对象数据和数据库中的数据记录之间一定同步呢?

①flush():

强制让数据库里的数据记录和session中缓存的对象数据保存一致,不一致就发起update这条sql语句修改数据让其一致, 一致, 它不动作,不会发去sql语句

有关于flush()方法的知识点:

  • a、在事务的commit()提交之前自动调用了session的flush()方法,然后再提交事务。
  • b、flush()可能会发送sql语句,但是不会提交事务。

②refresh():

它会强制发出一条select语句, 保证session缓存中的数据和数据库里数据记录是一致的, 如果发现不一致它会修改缓存中的对象中的数据让其一致。

示意图:

Hibernate操作缓存的方法还有clear() :

清理session缓存

相关推荐
腥臭腐朽的日子熠熠生辉31 分钟前
解决maven失效问题(现象:maven中只有jdk的工具包,没有springboot的包)
java·spring boot·maven
ejinxian33 分钟前
Spring AI Alibaba 快速开发生成式 Java AI 应用
java·人工智能·spring
杉之38 分钟前
SpringBlade 数据库字段的自动填充
java·笔记·学习·spring·tomcat
圈圈编码1 小时前
Spring Task 定时任务
java·前端·spring
俏布斯1 小时前
算法日常记录
java·算法·leetcode
27669582921 小时前
美团民宿 mtgsig 小程序 mtgsig1.2 分析
java·python·小程序·美团·mtgsig·mtgsig1.2·美团民宿
爱的叹息1 小时前
Java 连接 Redis 的驱动(Jedis、Lettuce、Redisson、Spring Data Redis)分类及对比
java·redis·spring
程序猿chen1 小时前
《JVM考古现场(十五):熵火燎原——从量子递归到热寂晶壁的代码涅槃》
java·jvm·git·后端·java-ee·区块链·量子计算
松韬2 小时前
Spring + Redisson:从 0 到 1 搭建高可用分布式缓存系统
java·redis·分布式·spring·缓存
绝顶少年2 小时前
Spring Boot 注解:深度解析与应用场景
java·spring boot·后端