【发布时间】:2014-08-03 18:53:01
【问题描述】:
我正在使用 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();
谁能帮帮我?
【问题讨论】:
-
在需要时使用新的 EntityManager 有哪些性能问题?它们应该是轻量级的,我能看到的唯一主要好处应该是添加的缓存,无论如何你都希望禁用它。
-
@Chris,我注意到程序在每次创建新的 EntityManager 时运行速度稍慢。
标签: java mysql caching jpa eclipselink