我正在使用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也始终会为一个和两个打印相同的值。
我已将以下内容添加到persistence.xml
<property name="eclipselink.cache.shared.default" value="false"/>
<property name="eclipselink.query-results-cache" value="false"/>
我必须遗漏一些东西,但我的想法已经不多了。
詹姆斯
答案 0 :(得分:3)
问题是您正在阅读PersistenceContext / EM,它维护数据的Object Transactional视图,除非刷新,否则永远不会更新。
将查询刷新属性“eclipselink.refresh”添加到查找调用(JPA 2.0)或在初始查找后调用em.refresh。
答案 1 :(得分:0)
@Entity
@Cache(shared=false)
public class Employee {
...
}
我希望它能解决您的缓存问题.........