2

我正在将 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"/>

我一定错过了一些东西,但我的想法已经不多了。

詹姆士

4

2 回答 2

3

问题是您正在阅读 PersistenceContext/EM,它维护数据的对象事务视图,除非刷新,否则永远不会更新。

将查询刷新属性“eclipselink.refresh”添加到查找调用 (JPA 2.0) 或在初始查找后简单地调用 em.refresh。

于 2010-05-27T15:44:15.607 回答
0
@Entity
@Cache(shared=false)
public class Employee {
    ...
}

我希望它能解决你的缓存问题......

于 2010-11-22T04:47:56.590 回答