/ / Ako vytvoríte EntityManager, keď si nie ste istí názvom jednotky? - java, jpa, java-ee, jpa-2,0, java-ee-6

Ako vytvoríte EntityManager, ak si nie ste istí názvom jednotky? java, jpa, java-ee, jpa-2.0, java-ee-6

Som v situácii, keď potrebujem určiť názov jednotky EntityManager v čase spustenia.

Napríklad by som rád urobil niečo také:

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

To však nie je možné s anotáciami.

Je možné vytvoriť EntityManager, keď si nie ste istí, aký je názov jednotky do času spustenia?

odpovede:

7 pre odpoveď č. 1

Je možné zadať názov jednotky perzistencie (PU) za behu, je to však parameter, ktorý sa používa pri vytváraní databázy EntityManagerFactory, nie jednotlivec EntityManager, Pozrite si javadoc pre Persistence metóda triedy createEntityManagerFactory(), Príklad:

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

Robím to v aplikácii, ktorá nie je Java EE (pomocou hovorov Java 6 SE vo webovej aplikácii hostovanej Tomcat), ale nie som si istý, ako robíte to isté v aplikácii Java EE 6 spravovanej kontajnerom. Je to možné.


3 pre odpoveď č. 2

Tu musíte manuálne vytvoriť entituManager bez použitia anotácií prostredníctvom JNDI, aby ste ju za behu nasmerovali na inú perzistentnú jednotku.

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