我对缓存和 JPA 实体(EclipseLink 2.4.1)+ GUICE PERSIST 有一个奇怪的行为
我不会使用缓存,但 我会随机获得一个在 MySQL 数据库中已经更改的旧实例。
我尝试了以下方法:
将@Cacheable (false) 添加到JPA 实体。
在 persistence.xml 文件中禁用缓存属性:
<class>MyEntity</class>
<shared-cache-mode>NONE</shared-cache-mode>
<properties>
<property name="eclipselink.cache.shared.default" value="false"/>
<property name="eclipselink.cache.size.default" value="0"/>
<property name="eclipselink.cache.type.default" value="None"/>
<property name="eclipselink.refresh" value="true"/>
<property name="eclipselink.query-results-cache" value="false"/>
<property name="eclipselink.weaving" value="false"/>
</properties>
即使激活跟踪 EclipseLink,我也看到了 JPQL 查询:
ReadObjectQuery 执行查询(name = "readObject" referenceClass = XX sql = "... (只是打个电话" find "entityManager
但是,但是,随机返回该类的旧值。
笔记
使用不同的 EntityManager 实例可能会发生并且每个人都有自己的缓存?我看过以下相关帖子:禁用 JPA EclipseLink 2.4 缓存如果是这样,可以在不使用的情况下清除所有 EntityManager 的缓存:???? em.getEntityManagerFactory().getCache().evictAll(); 是否可以在不使用 evictALL 的情况下清除所有缓存?