Génération DDL et paramètres généraux de persistence.xml (OpenJPA)
-
12-12-2019 - |
Question
Résumé
J'essaie d'exécuter un exemple d'application Web Java JPA 2.0.Le exemple d'application a été écrit pour fonctionner Glassfish
, en utilisant EclipseLink
en tant que fournisseur JPA.Je voudrais le convertir pour l'exécuter TomEE
avec OpenJPA
en tant que fournisseur JPA, mais je ne dispose pas de didacticiels détaillés pour être opérationnel avec OpenJPA
.
Problème
j'ai du mal à me convertir persistence.xml
travailler avec OpenJPA
au lieu de EclipseLink
.Plus précisément, le donné persistence.xml
ne précise pas :
Entity
Des classes.Sont-ils nécessaires ?- Le fournisseur JPA souhaité.Le conteneur sera-t-il par défaut quelque chose ?
- Le pilote JDBC.Comment spécifier une base de données « en mémoire » (uniquement à des fins de test initial) ?
Aussi:
- Comment les propriétés de génération DDL sont-elles exprimées dans OpenJPA ?Je n'ai pas réussi à les trouver Guide de l'utilisateur OpenJPA.
Détails
Ci-dessous se trouve l'EclipseLink persistence.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="order" transaction-type="JTA">
<jta-data-source>jdbc/__default</jta-data-source>
<properties>
<property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
<property name="eclipselink.ddl-generation.output-mode"
value="both" />
</properties>
</persistence-unit>
</persistence>
j'ai ce qui suit Entity
Des classes:
order.entity.LineItem
order.entity.LineItemKey
order.entity.Order
order.entity.Part
order.entity.PartKey
order.entity.Vendor
order.entity.VendorPart
Question
- Est-ce que quelqu'un sait à quoi ressemblerait l'équivalent persistence.xml pour OpenJPA ?
- Alternativement, si quelqu'un pouvait m'indiquer un didacticiel OpenJPA qui couvre ces problèmes, ce serait tout aussi bien.
La solution
Si vous ajoutez le openjpa.jdbc.SynchronizeMappings
propriété comme indiqué ci-dessous OpenJPA créera automatiquement toutes vos tables, toutes vos clés primaires et toutes les clés étrangères exactement pour correspondre à vos objets
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
Alternativement, vous pouvez utiliser EclipseLink dans TomEE en ajoutant simplement les fichiers jar EclipseLink à <CATALINA_HOME>/lib/
référez-vous ici pour Propriétés communes de PersistenceProvider
Autres conseils
Contraintes de clé étrangère
La ligne suivante ne crée pas de clés étrangères :
<property name="openjpa.jdbc.SynchronizeMappings"
value="buildSchema(ForeignKeys=true)"/>
Crée uniquement le schéma et supprime le contenu d'une base de données.
Mais si vous souhaitez créer des clés étrangères, utilisez les lignes suivantes :
<property name="openjpa.jdbc.SynchronizeMappings"
value="buildSchema(foreignKeys=true,schemaAction='dropDB,add')"/>
<property name="openjpa.jdbc.SchemaFactory"
value="native(foreignKeys=true)" />
<property name="openjpa.jdbc.MappingDefaults"
value="ForeignKeyDeleteAction=restrict, JoinForeignKeyDeleteAction=restrict"/>
Voir le SQL généré
D'une autre manière, si vous souhaitez voir la sortie SQL :
<property name="openjpa.Log"
value="DefaultLevel=TRACE,SQL=TRACE" />
NOTE:Afin de voir la sortie générée dans la console TomEE, vous devez modifier le niveau de journalisation dans le fichier loggin.properties
avec openjpa.level = FINEST
Voir plus dans http://openjpa.apache.org/faq.html