2010-11-27 2 views
7

Je suis dans une situation où j'ai besoin de déterminer le nom de l'unité EntityManager lors de l'exécution.Comment créer un EntityManager lorsque vous n'êtes pas sûr du nom de l'unité?

Par exemple, je voudrais faire quelque chose comme ceci:

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

Cependant, cela est impossible avec des annotations.

Est-il possible de créer l'EntityManager lorsque vous n'êtes pas sûr de ce que le nom de l'unité est avant l'exécution?

Répondre

7

Il est possible de spécifier le nom de l'unité de persistance (PU) au moment de l'exécution, mais il s'agit d'un paramètre utilisé dans la création du EntityManagerFactory, pas un individu EntityManager. Voir le Javadoc pour la méthode de classe PersistencecreateEntityManagerFactory(). Exemple:

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

Je le fais dans une application EE non-Java (en utilisant Java 6 S'appelle dans une application Web hébergée par Tomcat), mais je ne sais pas comment vous faites la même chose dans un container-managed Application Java EE 6. C'est possible.

3

Ici, vous devez créer manuellement entityManager sans utiliser d'annotations via JNDI pour pointer vers une unité persistante différente au moment de l'exécution.

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; 
} 
Questions connexes