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
War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top