java - 为什么hibernate/ehcache二级缓存在同一个 session 中总是丢失?

标签 java hibernate ehcache

我有一个长期运行的 EntityManager,我会定期清除它。我在我的一个实体上配置了读写缓存。

我做了一些调查,我可以看到该实体存在于缓存中。我什至可以看到来自 net.sf.ehcache.Cache.searchInStoreWithStats() 的缓存命中。但是,如果实体的时间戳晚于 session 创建时的时间戳,ehcache 将不会返回该实体:请参阅 AbstractReadWriteEhcacheAccessStrategy.get(Object, long) .

这种行为的原因是什么?有没有办法可以自定义 hibernate 或 ehcache 以在单个 EntityManager 中实现缓存命中?

最佳答案

看起来这是读写缓存的属性:您无法从同一 session 中创建的缓存中获取实体。

非严格读写缓存不比较时间戳,因此这确实在第一次 load() 后实现了缓存命中。

更好的是,事务缓存在 persist() 之后填充缓存,因此第一次 load() 将导致缓存命中。由于我与数据库的交互完全在单个 JVM 中的单个线程内进行,因此我相信这是可以安全使用的。

关于java - 为什么hibernate/ehcache二级缓存在同一个 session 中总是丢失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6305941/

相关文章:

java - 为什么我不能正确检索数据?

java - 如果我在项目中使用了反射堆,ehcache 是否比反射更快?

replication - 保护 EhCache 上的 RMI 安全

java - 非 Spring 托管类上的 @Cacheable

java - 从页面实例中检索总元素 - Spring MVC

java - 打印给定数字中最大的数字

Java - 正则表达式有效条目

Java hibernate 异常 : could not deserialize

java - MultipleBagFetchException 在 Hibernate 4 中不会发生,但在 5 中会发生

java - 配置 Hibernate 以适应现有的数据库约束?