Question

Hé les gars, mon but est de créer un propriétés à l'aide EntityManager dépendant de la base de données qui est en cours d'utilisation. Je l'ai vu quelque chose comme ça fait dans toutes mes recherches Google (j'ai fait le code plus de base aux fins de cette question):

@PersistenceUnit
private EntityManagerFactory emf; 
private EntityManager em;
private Properties props;

@PostConstruct
public void createEntityManager(){

//if oracle set oracle properties else set postgres properties

emf = Persistence.createEntityManagerFactory("app-x");
em = emf.createEntityManager(props);
}

Cela fonctionne et je peux charger des propriétés Oracle ou Postgres avec succès et je peux choisir soit de la base de données. Cependant, je suis en cours d'exécution sur des questions lorsque vous faites des déclarations INSERT. Chaque fois qu'un INSERT est fait, je reçois une exception clé primaire en double .. chaque fois! Quelqu'un peut-il faire la lumière sur pourquoi cela peut se produire? Merci -Brad

Était-ce utile?

La solution

Dans un environnement, vous pouvez directement injecter un EntityManager:

  

Pour obtenir une instance EntityManager, injecter le gestionnaire d'entités dans le composant d'application:

@PersistenceContext
EntityManager em;

Si vous devez traiter différents rel="nofollow la persistance des unités (et donc plusieurs instances de EntityManager), les déclarer dans la persistence.xml et obtenir le droit EntityManager injecté par son nom:

@PersistenceContext(unitName = "MyFirstPU")
EntityManager em;

Mise à jour: Selon Spécification de base de données (et a également mentionné cette blog ), EclipseLink peut être en mesure de détecter automatiquement la plate-forme de base de données et la eclipselink.target-database est facultative:

  

Si vous utilisez le fournisseur de persistance par défaut, le fournisseur tente de détecter automatiquement le type de base de données basée sur les métadonnées de connexion.

Si cela fonctionne avec Oracle et PostgreSQL (et je crois comprendre qu'il devrait), le client n'aurait à mettre en place une source de données qui est l'OMI le scénario idéal.

Autres conseils

annoter votre EntityManager avec @PersistenceContext(unitName="app-x")

Ainsi, vous aurez pas besoin de créer de nouveaux responsables des entités et des usines - tout est géré automatiquement par votre conteneur

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top