2010-11-27 49 views
7

我處於需要在運行時確定EntityManager的單元名稱的情況。當您不確定單元名稱時,如何創建EntityManager?

例如,我想要做這樣的事情:

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

但是,這是不可能的註解。

如果在運行時間之前不確定單元名稱是否可以創建EntityManager?

回答

7

可以在運行時指定持久性單元(PU)名稱,但是這是用於創建EntityManagerFactory而不是個人EntityManager的參數。請參閱JavadocPersistence分類方法createEntityManagerFactory()。例如:

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

我這樣做在非Java EE應用程序(使用Java SE 6在Tomcat的託管網絡應用程序調用),但我不知道你是如何在一個容器管理做同樣的事情Java EE 6應用程序。有可能的。

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; 
} 
相關問題