Hibernate 从gradle调用hbm2ddl

Hibernate 从gradle调用hbm2ddl,hibernate,gradle,hibernate-tools,hbm2ddl,Hibernate,Gradle,Hibernate Tools,Hbm2ddl,是否有gradle插件或任何其他方法调用hibernate tools hbm2ddl任务来从注释类生成数据库模式,而不必在某些配置文件中列出所有实体(@Entity),但在类路径中发现它们 最好是Hibernate 5,但Hibernate 4也可以。我最终通过移动persistence.xml文件实现了这一点 在我的场景中,我有一些库实体和一些应用程序实体,我想为它们生成一个模式。显然,我需要在persistence.xml中列出库实体,这很好,因为它们不会经常更改,但是为了从类路径中提取应

是否有gradle插件或任何其他方法调用hibernate tools hbm2ddl任务来从注释类生成数据库模式,而不必在某些配置文件中列出所有实体(@Entity),但在类路径中发现它们


最好是Hibernate 5,但Hibernate 4也可以。

我最终通过移动persistence.xml文件实现了这一点

在我的场景中,我有一些库实体和一些应用程序实体,我想为它们生成一个模式。显然,我需要在persistence.xml中列出库实体,这很好,因为它们不会经常更改,但是为了从类路径中提取应用程序实体而不在持久性文件中列出它们,我必须确保类和persistence.xml文件都由同一个类加载器加载(我猜)

这就是有效的方法

库实体:MyCustomer、MyInvoice

应用实体: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>
但是这样做会阻止您的应用程序实体被发现


这适用于Hibernate4。使用当前的Hibernate 5 alpha工具会生成一个空的ddl文件。

我最终通过移动persistence.xml文件实现了这一点

在我的场景中,我有一些库实体和一些应用程序实体,我想为它们生成一个模式。显然,我需要在persistence.xml中列出库实体,这很好,因为它们不会经常更改,但是为了从类路径中提取应用程序实体而不在持久性文件中列出它们,我必须确保类和persistence.xml文件都由同一个类加载器加载(我猜)

这就是有效的方法

库实体:MyCustomer、MyInvoice

应用实体: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>
但是这样做会阻止您的应用程序实体被发现

这适用于Hibernate4。使用当前的Hibernate5Alpha工具会给出一个空的ddl文件

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