【发布时间】:2012-07-16 23:41:29
【问题描述】:
在查询对象和/或删除/创建时,我无法理解实体管理器的正确用法。现在对于任何数据库事务,我有几个服务方法可以打开和关闭新的实体管理器,如下所示:
public static Long getCountApplicants(String active){
EntityManager entityManager = factory.createEntityManager();
long value = (Long) entityManager.createQuery("select count(distinct a) from Applicant a where a.active = " +active).getSingleResult();
System.out.println("get count app query");
entityManager.close();
return value;
}
既然我有一个 Java EE 应用程序,其中包含一个定义我的单元的 persistence.xml 文件,为什么我不能从我的工厂声明一个并在我的应用程序的整个生命周期中使用它?仅使用其中一个对象是否存在任何性能或内存泄漏问题?
更新:
我正在使用以下堆栈,Spring Framework/JPA Eclipselink
【问题讨论】:
-
EntityManager不是线程安全的。 -
所以每次我避免锁定问题时都关闭它?
-
我对这些东西也一无所知,但我想我注意到了一种内存泄漏形式,EntityManager 中的对象缓存继续增长。
-
这与我在测试环境中注意到的完全相同。使用 spring 框架,我从“EMF”中获得了持续的缓存实例调用,并且每隔一段时间就会减慢我的查询速度。
标签: java jpa eclipselink entitymanager