Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当您不确定单元名称时,如何创建EntityManager?_Java_Jpa_Jakarta Ee_Jpa 2.0_Java Ee 6 - Fatal编程技术网

Java 当您不确定单元名称时,如何创建EntityManager?

Java 当您不确定单元名称时,如何创建EntityManager?,java,jpa,jakarta-ee,jpa-2.0,java-ee-6,Java,Jpa,Jakarta Ee,Jpa 2.0,Java Ee 6,我需要在运行时确定EntityManager的单元名称 例如,我想这样做: @PersistenceContext(unitName = findAppropriateJdbcName()) EntityManager entityManager; 但是,这在注释中是不可能的 当您直到运行时才确定单元名称时,是否可以创建EntityManager?可以在运行时指定持久化单元(PU)名称,但这是创建EntityManager工厂时使用的参数,而不是单个EntityManager。有关持久性类方法

我需要在运行时确定EntityManager的单元名称

例如,我想这样做:

@PersistenceContext(unitName = findAppropriateJdbcName())
EntityManager entityManager;
但是,这在注释中是不可能的


当您直到运行时才确定单元名称时,是否可以创建EntityManager?

可以在运行时指定持久化单元(PU)名称,但这是创建
EntityManager工厂时使用的参数,而不是单个
EntityManager
。有关
持久性
类方法
createEntityManagerFactory()
,请参阅。例如:

EntityManagerFactory emf = Persistence.createEntityManagerFactory(unitname);
EntityManager em = emf.createEntityManager();
// ...

我在非JavaEE应用程序中这样做(在Tomcat托管的web应用程序中使用Java6SE调用),但我不确定在容器管理的JavaEE6应用程序中如何做同样的事情。这是可能的。

在这里,您必须手动创建entityManager,而无需通过JNDI使用注释在运行时将其指向不同的持久化单元

public EntityManager initializeEM(String pUnitName){

Context iCtx = new InitialContext();
String lookUpString = "java:comp/env/persistence/"+pUnitName;
javax.persistence.EntityManager entityManager =
                (javax.persistence.EntityManager)iCtx.lookup(lookUpString);

return entityManager;
}