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

时间:2010-11-27 17:36:21

标签: java jpa java-ee jpa-2.0 java-ee-6

我遇到需要在运行时确定EntityManager的单位名称的情况。

例如,我想做这样的事情:

@PersistenceContext(unitName = findAppropriateJdbcName())
EntityManager entityManager;

但是,注释无法实现这一点。

在运行时间之前不确定单位名称是否可以创建EntityManager?

2 个答案:

答案 0 :(得分:7)

可以在运行时指定持久性单元(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应用程序中执行相同的操作。这是可能的。

答案 1 :(得分:3)

在这里,您必须手动创建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;
}