JPA: créer EntityManagerFactory de propriétés
je suis en utilisant JPA dans un BOCAL-Projet et utilisé le persistence.xml pour l'installation de mon EntityManager.
Mais depuis l'persistence.xml est à l'intérieur du BOCAL après la construction, il est très compliqué pour l'utilisateur de modifier les paramètres par la suite. Donc, je suis à la recherche d'une solution où je peux configurer ma connexion sur un propertyfile qui est chargé lors de l'exécution.
Je suis tombé sur cette solution sur le web:
Map properties = new HashMap();
//Configure the internal EclipseLink connection pool
properties.put(JDBC_DRIVER, "oracle.jdbc.OracleDriver");
properties.put(JDBC_URL, "jdbc:oracle:thin:@localhost:1521:ORCL");
properties.put(JDBC_USER, "user-name");
properties.put(JDBC_PASSWORD, "password");
Persistence.createEntityManagerFactory("unit-name", properties);
Qui est la solution que je cherchais, mais il me manque une chose: Dans mon persistence.xml j'ai aussi déclarer un nom de schéma sur un fichier de mappage:
persistence.xml:
<persistence version="2.0" ...>
<persistence-unit name="jpa" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>...</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.jdbc.url" value="..."/>
<property name="javax.persistence.jdbc.password" value="..."/>
<property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver"/>
<property name="javax.persistence.jdbc.user" value="..."/>
</properties>
<mapping-file>META-INF/orm.xml</mapping-file>
</persistence-unit>
</persistence>
orm.xml:
<entity-mappings ...>
<persistence-unit-metadata>
<persistence-unit-defaults>
<schema>SCHEMA_NAME</schema>
</persistence-unit-defaults>
</persistence-unit-metadata>
</entity-mappings>
Donc ma question c'est en gros: Est-il une propriété que je peux utiliser pour définir le schéma au moment de l'exécution, tout comme je le fais avec les autres propriétés?
Ou est-il même une meilleure solution?
Merci d'avance!
OriginalL'auteur Sebastian | 2013-08-01
Vous devez vous connecter pour publier un commentaire.
Passer à java config. Ensuite, vous pouvez facilement injecter les valeurs de propriété par permettra à l'autowiring Environnement
Cet exemple est extrêmement basique. Mais en général, si vous savez comment faire la configuration xml vous pouvez mapper directement sur le Java config
contextConfig.java
jpaConfig.java
J'ai ajouté un exemple de base de ma réponse. Espérons que cela aide 🙂
Merci pour cet exemple, c'est plus clair maintenant ce qui vous ment. Mais nous n'utilisons pas de Printemps pour ce projet, et je ne pouvais pas voir où vous configurez le schéma? (ai-je raté quelque chose?)
Oh... excuses. Je n'ai aucune idée de comment faire cela sans Printemps
OriginalL'auteur Leon
Je ne sais pas si ses une meilleure solution, mais vous pouvez annoter vos entités JPA w/le schéma souhaité
Il n'. Éviter ce genre de codage en dur.
OriginalL'auteur Shmil The Cat
META-INF/orm.xml
est le nom par défaut, et si le fichier existe, il sera utilisé s'il a été spécifié dans l'unité de persistance ou non. Si le fichier de mappage dans lepersistence.xml
a un autre nom, puis le nom par défaut n'est pas utilisé.À l'utilisation de plusieurs incompatible base de données de fournisseurs, tels que SQL Server et Oracle, il est possible d'avoir plusieurs persistance des unités dans le
persistence.xml
, et de sélectionner le bon appareil au moment de l'exécution. Si le mappage de fichiers sont nommés avec les noms par défaut, chaque unité peut avoir son propre fichier de mappage ou pas du tout.OriginalL'auteur Jonathan Rosenne