Hibernate 如何在关闭()后打开实体管理器;爪哇EE

Hibernate 如何在关闭()后打开实体管理器;爪哇EE,hibernate,jpa,jakarta-ee,entitymanager,Hibernate,Jpa,Jakarta Ee,Entitymanager,我正在开发一个类,该类在我的dao类中注入一个实体管理器 但当我关闭实体管理器时,我无法再次打开它 这是一节课 public class EMinjector { public static EntityManagerFactory eMF; public static EntityManager eM; static { eMF = Persistence.createEntityManagerFactory("persistenceUnit"); eM = eMF.cre

我正在开发一个类,该类在我的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();
}
}
我试过了。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

在JavaEE环境中,您不应该使用本地资源,而应该使用JTA。您可以向EntityManager注入
@PersistenceContext
,因为EJB已经是事务性的,所以您不必提交、关闭等


对于上面示例中的资源\本地EntityManager,您不能重复使用已关闭的EntityManager,但必须使用工厂创建一个新的EntityManager

代码告诉您如何创建EntityManager eM=eMF.createEntityManager();我不想每次我想做一个事务时都创建一个实体管理器,相反,我只想创建一个实体管理器,在事务之前打开它,然后关闭它。创建一个EM就是打开一个EM!哦,谢谢,伙计:)