【问题标题】:How do you create an EntityManager when you are unsure of the unit name?当您不确定单位名称时,如何创建 EntityManager?
【发布时间】:2010-11-27 17:36:20
【问题描述】:
我需要在运行时确定 EntityManager 的单元名称。
例如,我想做这样的事情:
@PersistenceContext(unitName = findAppropriateJdbcName())
EntityManager entityManager;
但是,注释无法做到这一点。
如果在运行时不确定单元名称是什么,是否可以创建 EntityManager?
【问题讨论】:
标签:
java
jpa
jakarta-ee
jpa-2.0
java-ee-6
【解决方案1】:
可以在运行时指定持久性单元 (PU) 名称,但这是用于创建 EntityManagerFactory 的参数,而不是单独的 EntityManager。有关 Persistence 类方法 createEntityManagerFactory() 的信息,请参见 Javadoc。示例:
EntityManagerFactory emf = Persistence.createEntityManagerFactory(unitname);
EntityManager em = emf.createEntityManager();
// ...
我在非 Java EE 应用程序中执行此操作(在 Tomcat 托管的 Web 应用程序中使用 Java 6 SE 调用),但我不确定您如何在容器管理的 Java EE 6 应用程序中执行相同操作。这是可能的。
【解决方案2】:
这里你必须手动创建 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;
}