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ď č. 1Je 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;
}