2010-11-27 6 views
7

私は、実行時にEntityManagerのユニット名を特定する必要がある状況に陥っています。ユニット名がわからないときは、どのようにEntityManagerを作成しますか?

例えば、私はこのような何かをしたいと思います:

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

しかし、これは注釈では不可能です。

ユニット名が実行時までわからない場合はEntityManagerを作成できますか?

答えて

7

実行時に永続ユニット(PU)名を指定することはできますが、の作成に使用されるパラメータであり、個別のEntityManagerでは使用されません。 PersistenceクラスメソッドcreateEntityManagerFactory()Javadocを参照してください。例:

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

私は、これは非Java EEアプリケーションで行う(Java 6のSEを使用しては、TomcatがホストするWebアプリケーションで呼び出す)が、私はあなたがコンテナ管理の中で同じことを行うかどうかはわかりませんJava EE 6アプリケーション。可能です。

3

ここでは、実行時に別の永続ユニットを指すようにJNDIで注釈を使用せずに手動でentityManagerを作成する必要があります。

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; 
} 
関連する問題