【发布时间】:2016-04-13 14:18:26
【问题描述】:
我正在开发一个在我的 dao 类中注入实体管理器的类 但是当我关闭实体管理器时,我无法再次打开它
这是课
public class EMinjector {
public static EntityManagerFactory eMF;
public static EntityManager eM;
static {
eMF = Persistence.createEntityManagerFactory("persistenceUnit");
eM = eMF.createEntityManager();
}
public static EntityManager getEM(){
if (eM.getTransaction().isActive()==false)
//here where I want to open eM
return eM;
}
public static void closeEM() {
eM.getTransaction().commit();
eM.close();
}
}
我试过 eM.getTransaction().begin();但它抛出了这个异常:
Stacktraces
java.lang.IllegalStateException: EntityManager is closed
org.hibernate.jpa.internal.EntityManagerImpl.checkOpen(EntityManagerImpl.java:97)
org.hibernate.jpa.internal.EntityManagerImpl.checkOpen(EntityManagerImpl.java:88)
org.hibernate.jpa.internal.EntityManagerImpl.getSession(EntityManagerImpl.java:103)
org.hibernate.jpa.internal.TransactionImpl.getSession(TransactionImpl.java:35)
org.hibernate.jpa.internal.TransactionImpl.begin(TransactionImpl.java:45)
com.iticsys.GBO.dao.EMinjector.getEM(EMinjector.java:21)
// line 21 is where I pointed before
【问题讨论】:
-
你的代码告诉你如何创建一个EntityManager eM = eMF.createEntityManager();
-
我不想在每次做交易时都创建一个实体管理器,而是只想创建一个并在交易前打开它,然后再关闭它。
-
创建一个 EM 就是打开一个 EM!
-
哦,谢谢伙计 :)
标签: hibernate jpa jakarta-ee entitymanager