我正在使用Eclipse IDE,EclipseLink,JPA和MySQL开发应用程序。在应用程序的初始启动期间,我需要删除表的内容。但是,删除应用程序后,建立新连接仍然会从空表中读取旧数据。
我最初的方法是在每次执行操作时创建new EntityManager
。
private EntityManager entityManager;
public FacadeFactory() {
entityManager = DBConnection.connect();
}
禁用JPA缓存后,问题就解决了。
由于性能问题,EntityManager
已更改为Singleton,以便只打开一个与数据库的连接。
private static FacadeFactory instance;
private EntityManager entityManager;
private FacadeFactory() {
entityManager = DBConnection.connect();
}
public static FacadeFactory getInstance(){
if(instance == null){
instance = new FacadeFactory();
}
return instance;
}
现在,即使缓存仍然被禁用,我也遇到了和以前一样的问题。我试图从persistence.xml
和代码中禁用缓存,但它们都不适用于我。
<property name="eclipselink.cache.shared.default" value="false"/>
entityManager.getEntityManagerFactory().getCache().evictAll();
有人可以帮助我吗?
答案 0 :(得分:0)
entityManager.getEntityManagerFactory()getCache()evictAll()。;正在清除共享缓存,而eclipselink.cache.shared.default“value =”false“也会影响共享缓存。共享缓存也称为二级缓存 - 第一个是EntityManager本身用于跟踪的缓存由于您使用单个EntityManager来处理所有内容,因此所有内容都放在第一级缓存中。
您可以根据需要创建新的EntityManager,也可以偶尔调用em.clear()来清除EntityManager中的缓存 - 分离您的实体。