我處於需要在運行時確定EntityManager的單元名稱的情況。當您不確定單元名稱時,如何創建EntityManager?
例如,我想要做這樣的事情:
@PersistenceContext(unitName = findAppropriateJdbcName())
EntityManager entityManager;
但是,這是不可能的註解。
如果在運行時間之前不確定單元名稱是否可以創建EntityManager?
我處於需要在運行時確定EntityManager的單元名稱的情況。當您不確定單元名稱時,如何創建EntityManager?
例如,我想要做這樣的事情:
@PersistenceContext(unitName = findAppropriateJdbcName())
EntityManager entityManager;
但是,這是不可能的註解。
如果在運行時間之前不確定單元名稱是否可以創建EntityManager?
可以在運行時指定持久性單元(PU)名稱,但是這是用於創建EntityManagerFactory
而不是個人EntityManager
的參數。請參閱Javadoc的Persistence
分類方法createEntityManagerFactory()
。例如:
EntityManagerFactory emf = Persistence.createEntityManagerFactory(unitname);
EntityManager em = emf.createEntityManager();
// ...
我這樣做在非Java EE應用程序(使用Java SE 6在Tomcat的託管網絡應用程序調用),但我不知道你是如何在一個容器管理做同樣的事情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;
}