2016-03-25 11 views
1

Gibt es ein Gradle-Plugin oder andere Mittel zum Aufruf der hibernate-tools hbm2ddl Aufgabe, um ein Datenbankschema aus annotierten Klassen zu generieren, ohne alle Entitäten (@Entity) in irgendeiner Konfigurationsdatei aber haben sie im Klassenpfad entdeckt?Aufruf von hbm2ddl von Gradle

Vorzugsweise für Hibernate 5, aber Hibernate 4 wird auch tun.

Antwort

0

Endlich habe ich es gemacht, indem ich die Datei persistence.xml verschoben habe.

In meinem Szenario habe ich einige Bibliotheksentitäten und einige Anwendungsentitäten, für die ich ein Schema generieren möchte. Offensichtlich muss ich die Bibliotheksentitäten in persistence.xml auflisten, was gut ist, da sie sich nicht oft ändern, aber damit die Anwendungsentitäten aus dem Klassenpfad übernommen werden, ohne sie in der Persistenzdatei aufzuführen, musste ich das sicherstellen Sowohl die Klassen als auch die Datei persistence.xml wurden vom selben Classloader geladen (schätze ich).

Das funktioniert.

Bibliothek Einheiten: MyCustomer, MyInvoice

Anwendungseinheiten: MyBook, myBooking

/src/main/resources/META-INF/persistence.xml

<?xml version="1.0" encoding="UTF-8"?> 
<persistence 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" 
      version="2.0"> 

    <persistence-unit name="defaultPersistenceUnit"> 
     <!-- List the library classes only --> 
     <class>net.mylibrary.entity.MyCustomer</class> 
     <class>net.mylibrary.entity.MyInvoice</class> 

     <properties> 
      <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/> 
      <property name="hibernate.connection.username" value="myusr"/> 
      <property name="hibernate.connection.password" value="mypwd"/> 
      <property name="hibernate.connection.url" value="jdbc:mysql://localhost/mydb"/> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

build.gradle:

Das Ergebnis ist ein ddl mit Tabellen für MyCustomer, MyInvoice, My Buchen, MyBooking, auch wenn MyBook und MyBooking nirgendwo aufgeführt sind und hinzugefügt oder gelöscht werden können, ohne die Konfiguration zu berühren.

Der Trick hier besteht darin, die Datei persistence.xml aus dem Ressourcenordner in den Klassenordner zu kopieren. Wenn Sie dies nicht tun, um es zu haben, haben Sie die Ressourcen Pfad zur hibtools Konfiguration mit so etwas wie hinzufügen müssen:

hibtools files(["$buildDir/resources/main", "$buildDir/classes/main"]) 

aber dies tun werden Ihre Anwendung Entitäten aus, entdeckt zu verhindern.

Dies funktioniert mit Hibernate 4. Die Verwendung des aktuellen Hibernate 5 Alpha-Tools gibt eine leere ddl-Datei.