在session1.close()之后,session2从hibernate中的缓存中获取对象

时间:2017-02-01 14:21:59

标签: java hibernate caching

我听说在 session.close()之后,此会话中的对象将从缓存中删除。

如果'是' 那么为什么'session2'对象从缓存中检索对象?

当我第一次获取数据(查询执行)并且数据将存储在缓存(默认的第一级缓存)中时,我正在关闭'session1',对了! 但是,在创建'session2'对象后,我仍然能够检索特定对象(没有查询正在执行),这意味着它正在从缓存中获取对象! .... 为什么?

在图片中,我粘贴了我的代码 Image : my java files, table, persistent class, output

1 个答案:

答案 0 :(得分:0)

您需要了解Hibernate中的缓存级别。

  

第一级缓存:

     

第一级缓存是会话缓存,是强制缓存   所有请求必须通过。 Session对象保持一个   在将数据提交到数据库之前,它自身拥有对象。

     

二级缓存:

     

二级缓存是可选缓存,第一级缓存将是   在尝试定位对象之前,请始终咨询   二级缓存。可以在a上配置二级缓存   每个类和每个集合的基础,主要负责缓存   跨会话的对象。

     

查询级缓存:

     

Hibernate还为集成的查询结果集实现了一个缓存   与二级缓存密切相关。

所有内容均来自Cache Hibernate Tutorial。因此,简而言之,该会话的第一级缓存被删除。但这并不意味着需要删除其他会话缓存或2级缓存,因为它有自己的缓存。希望它对你有所帮助。