您好我正在使用jpa(eclipselink)的小项目中工作,我从不同的tomcat运行两个相同的应用程序,他们使用相同的架构,但如果我是 从一个应用程序改变值,另一个应用程序不从数据库中获取数据, 它总是返回它的本地数据,我也在实体类和
中尝试了这个@Cacheable(false)<property name="eclipselink.cache.shared.default" value="false" />
<property name="eclipselink.query-results-cache" value="false"/>
在xml文件中,但它们没有从数据库返回最新数据,我的代码如下:
EntityManager entityManager = GlobalBean.store.globalEntityManager();
String queryString = "select g from GlobalUrnConf g";
TypedQuery<GlobalUrnConf> globalUrnConfQuery = entityManager.createQuery
(queryString, GlobalUrnConf.class);
return globalUrnConfQuery.getSingleResult();
我通过以下方式获取实体经理和工厂 -
public EntityManagerFactory factory() {
if (this.entityManagerFactory == null) {
entityManagerFactory = Persistence.createEntityManagerFactory("FileUpload");
}
return this.entityManagerFactory;
}
public EntityManager globalEntityManager() {
if (this.entityManager == null) {
this.entityManager = factory().createEntityManager();
}
return this.entityManager;
}
请帮帮我。提前谢谢。
答案 0 :(得分:0)
return globalUrnConfQuery
.setHint(QueryHints.CACHE_USAGE, CacheUsage.CheckCacheOnly)
.getSingleResult();
答案 1 :(得分:0)
您正在缓存EntityManager,缓存并保留在托管实体上,以便通过它读取它以实现身份和管理更改。你可以通过使用刷新查询提示或其他查询提示来解决这个问题,这样他们就可以避免使用缓存了,但是你可能更好的是直接管理EntityManager的生命和缓存,只在需要时获取它们,或者在返回实体可以释放时的逻辑点。例如,尝试调用EntityManager clear。