2016-03-25 14 views
1

Bazı yapılandırma dosyalarındaki tüm varlıkları (@Entity) listelemeye gerek kalmadan, açıklamalı sınıflardan bir veritabanı şeması oluşturmak için hazırda bekletme araçları hbm2ddl görevini çağırmak için bir başka eklenti veya başka bir araç var mı? Sınıf içinde keşfettiler mi? Hazırda bekletme 5 için, ancak Hazırda Bekletme 4 için de tercih edilir.Nottan hbm2ddl çağırma

cevap

0

Nihayet persistence.xml dosyasını hareket ettirerek bunu gerçekleştirdim.

Benim senaryoda, bazı kütüphane varlıkları ve bir şema oluşturmak istediğim bazı uygulama varlıkları var. Görünüşe göre persence.xml dosyasındaki kütüphane varlıklarını listelemem gerekiyor, ki bu da sık sık değişmediği için iyi, ancak uygulama varlıklarının kalıcılık dosyasında listelemeden sınıf yolundan alınabilmesi için bunu sağlamak zorunda kaldım. hem sınıflar hem de persistence.xml dosyası aynı classloader tarafından yüklendi (sanırım).

Bu işe yarıyor.

Kütüphane kişiler: MyCustomer, MyInvoice

Uygulama kişiler: MyBook,

/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 myBooking'e:

apply plugin: 'war' 
apply plugin: 'eclipse-wtp' 

repositories { 
    jcenter() 
    mavenLocal() 
} 

dependencies { 
    compile ... my project dependencies ... 
} 

configurations { 
    hibtools 
} 

dependencies { 
    hibtools 'net.mylibrary:MyEntities:1.0' // Library for MyCustomer and MyInvoice 
    hibtools 'org.hibernate:hibernate-tools:4.+', 
     'mysql:mysql-connector-java:5.+' 
    hibtools files("$buildDir/classes/main") // MyBook and MyBooking 
} 

task createSchema(dependsOn: ['build', 'copyPersistenceUnit']) << {  
    ant.taskdef(name: 'hibernatetool', 
      classname: 'org.hibernate.tool.ant.HibernateToolTask', 
      classpath: configurations.hibtools.asPath) 
    ant.hibernatetool(destdir: 'schema') { 
     ant.jpaconfiguration(persistenceunit: 'defaultPersistenceUnit') 
     ant.hbm2ddl(drop: 'false', export: 'false', outputfilename: 'mydb.sql') 
    } 
} 

task copyPersistenceUnit(type: Copy) { 
    from "$buildDir/resources/main/META-INF/persistence.xml" 
    into "$buildDir/classes/main/META-INF/" 
} 

Sonuç, MyCustomer, MyInvoice, My için tablo içeren bir ddl'dir. Kitap, MyBooking, MyBook ve MyBooking, herhangi bir yerde listelenmemiş olsa bile ve yapılandırmaya dokunmadan eklenebilir veya silinebilir.

Buradaki hile, persistence.xml dosyasını kaynaklar klasöründen sınıf klasörüne kopyalamaktır.

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

ama bunu yaparken keşfedilen bulunan uygulama varlıkları önleyecektir: Bunu yapmazsanız , sahip olmak için bu gibi bir şey ile hibtools yapılandırmasına kaynaklar yolunu eklemeniz gerekir bulundu.

Bu Hazırda Bekletme 4 ile çalışır. Geçerli Hazırda 5 alfa aracını kullanarak boş bir ddl dosyası verir.