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

我正处于需要在运行时确定EntityManager的单元名称的情况。

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

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

但是,注释不可能实现这一点。

如果在运行时之前不确定单元名称是什么,是否可以创建EntityManager?

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

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

我在非Java EE应用程序中执行此操作(在Tomcat托管的Web应用程序中使用Java 6 SE调用)但我不确定如何在容器管理的Java EE 6应用程序中执行相同的操作。 有可能的。

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