我正在使用 eclipselink JPA 和数据库,该数据库也在我的应用程序外部进行更新。因此,我想每隔几秒钟查询一些表。即使我尝试禁用缓存和查询缓存,我也无法使其工作。例如:
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("default");
EntityManager em = entityManagerFactory.createEntityManager();
MyLocation one = em.createNamedQuery("MyLocation.findMyLoc").getResultList().get(0);
Thread.sleep(10000);
MyLocation two = em.createNamedQuery("MyLocation.findMyLoc").getResultList().get(0);
System.out.println(one.getCapacity() + " - " + two.getCapacity());
即使在我的应用程序休眠时容量发生变化,println 始终会为 1 和 2 打印相同的值。
我已将以下内容添加到 persistence.xml
<property name="eclipselink.cache.shared.default" value="false"/>
<property name="eclipselink.query-results-cache" value="false"/>
我一定错过了一些东西,但我已经没有想法了。
詹姆斯
最佳答案
问题是您正在阅读 PersistenceContext/EM,它维护数据的对象事务 View ,并且除非刷新,否则永远不会更新。
将查询刷新属性“eclipselink.refresh”添加到查找调用 (JPA 2.0) 中,或者在初始查找后简单地调用 em.refresh。
关于caching - 禁用 eclipselink 缓存和查询缓存 - 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2921424/