DDL-Generierung und allgemeine Persistenz.xml-Einstellungen (Open JPA)
-
12-12-2019 - |
Frage
Zusammenfassung
Ich versuche, ein Java-Webanwendungs-JPA 2.0-Beispiel auszuführen.Der Beispielanwendung wurde geschrieben, um hineinzulaufen Glassfish
, wobei EclipseLink
als JPA-Anbieter.Ich würde es gerne konvertieren, um darin zu laufen TomEE
mit OpenJPA
als JPA-Anbieter, aber ich kann keine detaillierten Tutorials zum Einrichten und Ausführen mit OpenJPA
.
Problem
Ich habe Probleme beim Konvertieren persistence.xml
arbeiten mit OpenJPA
statt EclipseLink
.Genauer gesagt, die gegebene persistence.xml
spezifiziert nicht:
Entity
Klasse.Sind diese notwendig?- Der gewünschte JPA-Anbieter.Wird der Container standardmäßig auf etwas eingestellt sein?
- Der JDBC-Treiber.Wie gebe ich eine "In-Memory" -Datenbank an (nur für erste Testzwecke)?
Auch:
- Wie werden die DDL-Generierungseigenschaften in OpenJPA ausgedrückt?Ich konnte sie nicht finden OpenJPA Benutzerhandbuch.
Hinweise
Unten ist der 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>
Ich habe Folgendes Entity
Klasse:
order.entity.LineItem
order.entity.LineItemKey
order.entity.Order
order.entity.Part
order.entity.PartKey
order.entity.Vendor
order.entity.VendorPart
Frage
- Weiß jemand, was die äquivalente Beharrlichkeit ist.xml würde für OpenJPA aussehen?
- Alternativ, wenn mich jemand auf ein OpenJPA-Tutorial verweisen könnte, das diese Probleme behandelt, wäre das genauso gut
Lösung
Wenn Sie das hinzufügen openjpa.jdbc.SynchronizeMappings
eigenschaft wie unten gezeigt OpenJPA erstellt automatisch alle Ihre Tabellen, alle Ihre Primärschlüssel und alle Fremdschlüssel genau so, dass sie Ihren Objekten entsprechen
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
Alternativ können Sie EclipseLink in TomEE verwenden, indem Sie einfach die EclipseLink-Gläser hinzufügen <CATALINA_HOME>/lib/
siehe hier für Allgemeine PersistenceProvider-Eigenschaften
Andere Tipps
Fremdschlüsseleinschränkungen
Die nächste Zeile erstellt keine Fremdschlüssel:
<property name="openjpa.jdbc.SynchronizeMappings"
value="buildSchema(ForeignKeys=true)"/>
Erstellt nur Schema und löscht Inhalt einer Datenbank.
Wenn Sie jedoch Fremdschlüssel erstellen möchten, verwenden Sie die folgenden Zeilen:
<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"/>
Siehe generiertes SQL
Auf andere Weise, wenn Sie die SQL-Ausgabe sehen möchten:
<property name="openjpa.Log"
value="DefaultLevel=TRACE,SQL=TRACE" />
BEACHTEN:Um die generierte Ausgabe in der TomEE-Konsole anzuzeigen, müssen Sie die Protokollstufe in der Datei ändern loggin.properties
mit openjpa.level = FINEST
Sehen Sie mehr in http://openjpa.apache.org/faq.html