Java 当您不确定单元名称时,如何创建EntityManager?
我需要在运行时确定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。有关持久性类方法
@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;
}