Java 休眠二级缓存已清除

Java 休眠二级缓存已清除,java,hibernate,jpa,ehcache,hibernate-search,Java,Hibernate,Jpa,Ehcache,Hibernate Search,我们在其中一个应用程序中使用Hibernate Search 3.4.2 Final和EHCACHE 2.3.1。Hibernate搜索索引的数据是只读的。出于性能原因,我们正在将完整数据加载到二级缓存中 在一段时间内,某些意外事件会清除整个二级缓存。这一定是我们的代码没有显式触发的 有没有人有一个假设?在回滚事务中使用Hibernate搜索是否有可能导致这种行为 编辑1: 这是我们的EHCACHE配置: <ehcache updateCheck="false"> <d

我们在其中一个应用程序中使用Hibernate Search 3.4.2 Final和EHCACHE 2.3.1。Hibernate搜索索引的数据是只读的。出于性能原因,我们正在将完整数据加载到二级缓存中

在一段时间内,某些意外事件会清除整个二级缓存。这一定是我们的代码没有显式触发的

有没有人有一个假设?在回滚事务中使用Hibernate搜索是否有可能导致这种行为

编辑1:

这是我们的EHCACHE配置:

<ehcache updateCheck="false">
    <diskStore path="java.io.tmpdir/ds42" />

    <defaultCache maxElementsInMemory="200000" eternal="true"
              statistics="true" overflowToDisk="true" diskPersistent="false"
              diskExpiryThreadIntervalSeconds="3600" memoryStoreEvictionPolicy="LRU"/>
</ehcache>

这种“令人惊讶”的行为的答案可以在里面找到


防止Hibernate清除二级缓存。

可能是缓存的大小,即数据太大(可能是同一缓存中的其他数据)这会导致缓存丢失某些内容?我不是Hibernate搜索专家,但我们也在使用它,而且它只读取实体,因此不会影响二级缓存。听起来像日志。您是否执行任何DML本机查询?如果是这样的话,可能会很有用。可能是它超过了“秒”,这是一个条目,在该条目之后,缓存被清除,并返回数据库以获取最新的数据,例如
query.unwrap(org.hibernate.SQLQuery.class).addSynchronizedQuerySpace("");