在查询对象或删除/创建对象时,我很难理解实体管理器的正确用法。眼下对于任何数据库事务我有一个打开几个服务的方法和新的接近实体管理器,像这样:从EntityManagerFactory正确使用实体管理器
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;
}
因为我有一个persistence.xml文件定义我的单元,一个Java EE应用程序为什么不能我只从我的工厂申报一个,并在我的应用程序的整个生命周期中使用它?仅使用其中一个对象是否存在任何性能或内存泄漏问题?
更新:
我使用下面的堆栈,Spring框架/ JPA的EclipseLink
'EntityManager'不是线程安全的。 – 2012-07-16 23:46:19
所以通过关闭它每次我避免锁定问题? – Warz 2012-07-16 23:59:51
我对这个东西一无所知,但我想我注意到一种内存泄漏形式,EntityManager中的对象缓存持续增长。 – 2012-07-17 00:02:10