如何在eclipselink中禁用缓存

我尝试使用persistence.xml中的以下属性在Eclipse indigo中禁用EclipseLink中的L2缓存: –

 NONE 

基本上我正在测试一个场景,即在两个不同会话中创建的同一对象是否击中数据库两次,或者两个会话都指的是在内存缓存中的早期会话中创建的同一对象。 它不应该因为在persistence.xml中提到上述属性而禁用了L2缓存

我的代码如下: –

  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); 

请帮帮我,不管我错过了什么? 或者我需要以其他方式做到这一点?

在进行调用的每个函数中添加此行。 在查阅视图时我在find函数中使用。

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

此行在运行de query之前清除缓存。

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

您已禁用对象缓存,但我认为您仍然在使用查询缓存。 您也应该能够禁用查询缓存

   

同样的事情也可以用查询提示设置。 如果persistence.xml配置似乎不起作用,您也可以尝试使用查询提示。

还要注意,基本上,即使没有缓存,你也要比较同一个对象,所以除非它是分离的,否则它应该是相同的。

相关问题:

  • 禁用eclipselink缓存和查询缓存 – 不工作?
  • 在JPA中禁用缓存(eclipselink)