EclipseLink – DDL-Schema-Generierung in JPA 2.1

Wenn Sie gute Erfahrungen damit gemacht haben Java-Persistenz-APIkönnen Sie die JPA so konfigurieren, dass sie das erforderliche Schema generiert. Diese sind nicht Teil der JPA-Implementierung vor der JPA 2.1-Spezifikation. Diese gelten als Erweiterungen für den JPA-Anbieter. Dies wurde jedoch von der Norm her standardisiert JPA 2.1-Version. JPA 2.1 fügte eine Reihe von Eigenschaften für die Wartung und Generierung von Datenbankschemata hinzu. In diesem Tutorial wird erklärt, wie Sie EclipseLink zum Generieren von Schemata für die Datenbanktabellen verwenden.

EclipseLink bietet Ihnen eine eclipselink.dll- Generation um anzugeben, wie EclipseLink die DDL (Data Defintion Language) für das Datenbankschema (Tabellen und Einschränkungen) bei der Bereitstellung generiert.

Gültige EclipseLink DDL-Werte

Das Eigentum von eclipselink.ddl- Generation hat mehrere gültige Werte und diese sind:

  • Tabellen erstellen: EclipseLink versucht, für jede Tabelle eine CREATE TABLE SQL auszuführen. Wenn die Tabelle bereits vorhanden ist, folgt EclipseLink dem Standardverhalten für Ihre spezifische Kombination aus Datenbank und JDBC-Treiber (wenn CREATE TABLE SQL für eine bereits vorhandene Tabelle ausgegeben wird). In den meisten Fällen wird eine Ausnahme ausgelöst und die Tabelle wird nicht erstellt; Die vorhandene Tabelle wird verwendet. EclipseLink fährt dann mit der nächsten Anweisung fort.
  • Tabellen erstellen oder erweitern: EclipseLink wird versuchen, Tabellen zu erstellen. Wenn die Tabelle vorhanden ist, fügt EclipseLink alle fehlenden Spalten hinzu.
  • Drop-and-Create-Tabellen: EclipseLink versucht, alle Tabellen zu löschen und dann alle Tabellen zu erstellen. Wenn irgendwelche Probleme auftreten. EclipseLink folgt dem Standardverhalten für Ihre spezifische Datenbank und spezifische JDBC-Treiberkombination und fährt dann mit der nächsten Anweisung fort. Dies ist in der Entwicklung nützlich, wenn sich das Schema häufig ändert, oder beim Testen, wenn vorhandene Daten gelöscht werden müssen.
  • keiner: Standardmäßig wird kein DDL generiert; Kein Schema generiert.

Generiertes EclipseLink-Tutorial-Schema

Die Beispiele, die für die Bereitstellung des EclipseLink-Lernprogramms erstellt wurden, waren vom zuvor erstellten Datenbankschema abhängig. Die nun erstellten Entitäten enthalten unterschiedliche Beziehungen und Eigenschaften, die von Primärschlüsseln (einfach und zusammengesetzt) ​​und Zuordnungen (einschließlich OneTOne, OneToMany, ManyToOne und ManyToMany) bis hin zu Vererbung und Identitätsgenerierung reichen. Aber was könnte passieren, wenn wir die EclipseLink DDL-Generation verwenden? Reicht es aus, ein identisches Schema für das manuell erstellte Schema zu erstellen? Mal sehen.

Abbildung 1.0 zeigt, dass das manuell erstellte Schema die vorhandenen Zuordnungen und Eigenschaften für seine Tabellen enthält.

EclipseLink – DDL-Schema-Generierung in JPA 2.1

Abbildung 1.0

  • Das Modell beschrieb die Zusammenhänge aus einer Datenbankperspektive.

Abbildung 1.1 zeigt das Schema, das mithilfe der EclipseLink -ddl-generation erstellt wurde.

Mit EclipseLink erstelltes JavaBeat-Schema – Schemagenerierung

Abbildung 1.1

  • Das in Abbildung 1.1 gezeigte JavaBeat-Schema zeigt das mithilfe von generierte Schema an EclipseLink-ddl-generation.
  • Das Modell beschreibt das Schema aus einer objektorientierten Perspektive.

Die erforderliche Persistenzkonfiguration


<properties>
 <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/JavaBeat-jpa-generate"/>
 <property name="javax.persistence.jdbc.user" value="root"/>
 <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
 <property name="javax.persistence.jdbc.password" value="root"/>
 <property name="eclipselink.logging.level" value="FINEST"/>
 <property name="eclipselink.ddl-generation" value="create-tables"/>
 </properties>

  • Die Eigenschaft eclipselink.ddl-generation wird verwendet, um die Strategie zu konfigurieren, die zum Erstellen des Schemas verwendet wird.

Exportieren Sie die generierte DDL in eine externe Datei

Sie haben die Möglichkeit, das generierte Schema in eine externe DDL zu exportieren. Sie müssen Ihrer Persistenzkonfiguration eine neue Eigenschaft hinzufügen.


<properties>
 <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/JavaBeat-jpa-generate"/>
 <property name="javax.persistence.jdbc.user" value="root"/>
 <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
 <property name="javax.persistence.jdbc.password" value="root"/>
 <property name="eclipselink.logging.level" value="FINEST"/>
 <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
 <property name="eclipselink.ddl-generation.output-mode" value="sql-script"/>
 </properties>

  • Die Eigenschaft eclipselink.ddl-generation.output-mode verfügt über drei Attribute, die angewendet werden können.
  • beide: DDL wird generiert und sowohl in die Datenbank als auch in eine Datei geschrieben.
  • Datenbank: (Standard) DDL wird nur generiert und in die Datenbank geschrieben.
  • SQL-Skript: DDL wird nur generiert und in eine Datei geschrieben.
    • Die DDL-Datei wird generiert und erhält einen Standardnamen.

    Vergeben Sie einen Namen für die generierten Dateien:

    Wenn Sie den generierten Dateien einen bestimmten Namen geben möchten, können Sie zusätzliche Eclipselink-Eigenschaften verwenden.

    
    <properties>
     <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/JavaBeat-jpa-generate"/>
     <property name="javax.persistence.jdbc.user" value="root"/>
     <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
     <property name="javax.persistence.jdbc.password" value="root"/>
     <property name="eclipselink.logging.level" value="FINEST"/>
     <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
     <property name="eclipselink.ddl-generation.output-mode" value="sql-script"/>
     <property name="eclipselink.create-ddl-jdbc-file-name" value="sql-create-script"/>
    // Created statements file name
     <property name="eclipselink.drop-ddl-jdbc-file-name" value="sql-drop-script"/>// Dropped statements file name
     </properties>
    
    

    Ändern Sie den Speicherort der erstellten Dateien:

    Wenn Sie den Speicherort der generierten Dateien ändern möchten, können Sie eine zusätzliche Eclipselink-Eigenschaft namens eclipselink.application-location verwenden.

    
    <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/JavaBeat-jpa-generate"/>
     <property name="javax.persistence.jdbc.user" value="root"/>
     <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
     <property name="javax.persistence.jdbc.password" value="root"/>
     <property name="eclipselink.logging.level" value="FINEST"/>
     <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
     <property name="eclipselink.ddl-generation.output-mode" value="sql-script"/>
     <property name="eclipselink.create-ddl-jdbc-file-name" value="sql-create-script"/>
     <property name="eclipselink.drop-ddl-jdbc-file-name" value="sql-drop-script"/>
     <property name="eclipselink.application-location" value="c:/javabeat-database-files"/>
    
    

    Abbildung 1.2 zeigt Ihnen die Dateien, die im angegebenen Ordner erstellt wurden.

    Dateien in einem bestimmten Ordner erstellt

    Abbildung 1.3

    Bereitstellung beim Start

    Wenn Sie das DDL-Schema zu diesem Zeitpunkt generieren möchten, zu dem die Entity-Manager-Factory nicht durch die Erstellung einer Entity-Manager-Instanz erworben wurde, müssen Sie eine Eclipselink-Deploy-on-Startup-Eigenschaft bereitstellen. Diese Eigenschaft akzeptiert die beiden Werte „true“ und „false“, wobei „true“ bedeutet, dass die DDL-Generierung gestartet werden soll, sobald die Factory der Entity-Manager-Instanz erstellt wurde, während „false“ bedeutet, dass die DDL-Generierung gestartet werden soll, sobald die Entity-Manager-Instanz erstellt wurde.

    
    <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/JavaBeat-jpa-generate"/>
     <property name="javax.persistence.jdbc.user" value="root"/>
     <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
     <property name="javax.persistence.jdbc.password" value="root"/>
     <property name="eclipselink.logging.level" value="FINEST"/>
     <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
     <property name="eclipselink.ddl-generation.output-mode" value="sql-script"/>
     <property name="eclipselink.create-ddl-jdbc-file-name" value="sql-create-script"/>
     <property name="eclipselink.drop-ddl-jdbc-file-name" value="sql-drop-script"/>
     <property name="eclipselink.application-location" value="c:/javabeat-database-files"/>
     <property name="eclipselink.deploy-on-startup" value="false"/>
    
    
    • Diese Eigenschaft ist wichtig, wenn Sie in einer großen Anwendung gearbeitet haben, da die Datenbankerstellung eine Weile dauern kann oder wenn die Factory-Erstellung bei der Initialisierung der Anwendung erfolgt und der Entitätsmanager noch nicht erstellt wurde.

    Zusammenfassung

    Eclipselink bietet viele Erweiterungseigenschaften, die in der Datei persistence.xml angegeben werden können und zur Konfiguration des EclipseLink JPA-Frameworks verwendet werden können. In diesem Tutorial wurden Eigenschaften erwähnt, die zum Generieren eines Datenbankschemas basierend auf den erstellten Objekten verwendet werden können.

    Dabei handelt es sich nicht nur um die Eigenschaften, die von Eclipse für diese Konfiguration bereitgestellt werden könnten, sondern es enthält auch andere zusätzliche Eigenschaften, die möglicherweise in einem späteren Tutorial zur Behandlung von Eclipselink-Ausnahmen und zum Zugriff auf den Eclipselink-Deskriptor und die Zuordnungs-API besprochen werden.

    Kommentar verfassen

    Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

    Nach oben scrollen