我听说在 session.close()之后,此会话中的对象将从缓存中删除。
如果'是' 那么为什么'session2'对象从缓存中检索对象?
当我第一次获取数据(查询执行)并且数据将存储在缓存(默认的第一级缓存)中时,我正在关闭'session1',对了! 但是,在创建'session2'对象后,我仍然能够检索特定对象(没有查询正在执行),这意味着它正在从缓存中获取对象! .... 为什么?
在图片中,我粘贴了我的代码 Image : my java files, table, persistent class, output
答案 0 :(得分:0)
您需要了解Hibernate中的缓存级别。
第一级缓存:
第一级缓存是会话缓存,是强制缓存 所有请求必须通过。 Session对象保持一个 在将数据提交到数据库之前,它自身拥有对象。
二级缓存:
二级缓存是可选缓存,第一级缓存将是 在尝试定位对象之前,请始终咨询 二级缓存。可以在a上配置二级缓存 每个类和每个集合的基础,主要负责缓存 跨会话的对象。
查询级缓存:
Hibernate还为集成的查询结果集实现了一个缓存 与二级缓存密切相关。
所有内容均来自Cache Hibernate Tutorial。因此,简而言之,该会话的第一级缓存被删除。但这并不意味着需要删除其他会话缓存或2级缓存,因为它有自己的缓存。希望它对你有所帮助。