如何禁用缓存的EclipseLink(how to disable cache in eclipse

2019-08-01 13:22发布

我曾尝试通过在persistence.xml使用以下属性禁用L2高速缓存中的EclipseLink与Eclipse靛蓝: -

<property name="eclipselink.cache.shared.default" value="false"/>

<shared-cache-mode>NONE</shared-cache-mode>

基本上我正在测试一个场景中同一个对象是否在两个不同的会话创建是打两次数据库或两个会话指的是在早期会话在内存缓存中创建同一个对象。 它不应该因为L2缓存由上面的persistence.xml性能提禁用

我的代码如下: -

 Session session = DataAccessManager.getManager().openSession();
 ReferenceObjectRepository referenceObjectRepository =     ReferenceObjectRepository.getInstance();
 ReferenceObjectKey referenceObjectKey = new ReferenceObjectKey(getStringValue("testCacheByPass.input"));
 //load object first time.
 ReferenceObject referenceObject = referenceObjectRepository.load(ReferenceObject.class, referenceObjectKey);
 logger.log(Level.SEVERE, "Cache ReferenceObject: " + referenceObject);

 //load object in another session
 Session sessionNew = DataAccessManager.getManager().openNewSession();
 Object dbObject = referenceObjectRepository.load(ReferenceObject.class,    referenceObjectKey);
 logger.log(Level.SEVERE, "DB loaded ReferenceObject: " + dbObject);

请帮我是否错过了什么? 或者我需要做一些其他的方式?

Answer 1:

在呼叫是由每个功能加入这一行。 我在查找功能使用咨询视图时。

((JpaEntityManager)em.getDelegate()).getServerSession().getIdentityMapAccessor().invalidateAll();

这条线清除运行去查询前缓存。

public Entity find(Object id) {
    ((JpaEntityManager)em.getDelegate()).getServerSession().getIdentityMapAccessor().invalidateAll();
    return em.find(Entity.class, id);
}


Answer 2:

您已经禁用对象缓存,但我觉得你还是有发挥的查询缓存。 你应该能够禁用查询缓存也与

<property name="eclipselink.query-results-cache" value="false"/>
<property name="eclipselink.refresh" value="true"/>

同样的事情可以查询提示进行设置了。 您也可以尝试使用查询提示,如果persistence.xml中的配置似乎并不奏效。

还要注意的是本质,即使没有缓存,你会比较同一个对象,所以除非是脱离它应该是相同的。

相关的问题:

  • 禁用的EclipseLink缓存和查询缓存-不工作?
  • 禁用JPA缓存(的EclipseLink)


文章来源: how to disable cache in eclipselink