You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot应用中如何查看Hibernate一级缓存(Session)中的内容?

查看Hibernate一级缓存(Session)中对象的调试方法

要在user.setAge(23L);行设置断点(已执行第一次save)后查看Session缓存里的user值,有几种直接的调试办法:

方法一:用Hibernate Session API手动查询

在IDE的表达式求值窗口(比如IDEA的Evaluate Expression)里执行这段代码:

// 获取当前Hibernate Session
org.hibernate.Session session = ((org.hibernate.Session) userRepository.getEntityManager().getDelegate());
// 直接取出缓存中的user实例
session.get(User.class, user.getId());
// 或者查看Session缓存的统计信息
session.getSessionFactory().getStatistics().getEntityStatistics(User.class.getName());

执行后就能看到缓存里的user属性值——第一次save后user已经有了ID,而且缓存里的实例和你代码里的user是同一个引用。

方法二:直接查看Session内部结构

  1. 调试时从userRepository里找到entityManager实例;
  2. 展开entityManager,找到delegate字段,这就是Hibernate的SessionImpl对象;
  3. 继续展开SessionImpl → persistenceContext → entityEntries,这个Map里存着当前Session缓存的所有实体,找到对应的User就能查看它的属性。

方法三:启用Hibernate统计日志辅助验证

要是需要更直观的缓存状态输出,在application.properties里添加配置:

spring.jpa.properties.hibernate.generate_statistics=true
logging.level.org.hibernate.stat=DEBUG

调试时控制台会输出Session缓存的统计数据,包括实体数量、加载情况等,配合断点能辅助确认缓存内容。

补充:第一次save(user)执行后,Hibernate已经把user实例放进Session缓存了,此时你代码里的user引用和缓存里的实例是同一个,所以直接看代码里的user对象属性,其实和缓存内容是一致的。只有通过其他查询获取的实例,才需要专门查Session缓存。

内容的提问来源于stack exchange,提问作者Hassen Gaaya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 02:32:10