我遇到需要在运行时确定EntityManager的单位名称的情况。
例如,我想做这样的事情:
@PersistenceContext(unitName = findAppropriateJdbcName())
EntityManager entityManager;
但是,注释无法实现这一点。
在运行时间之前不确定单位名称是否可以创建EntityManager?
答案 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;
}