Hibernate: Gradle Ant не может найти hibernate.reveng.xml

Создаю задачу для генерации классов java из базы данных. Я создал задачу gradle с помощью ant. Странно то, что задача ожидает файл hibernate.cfg.xml для свойства revengfile.

Это моя задача Gradle:

task hibernate{
   description "Generates Java Classes from the Database Schema."
   group "Hibernate"

   doLast{
    ant {
        def base = "$projectDir/src/main/java"

        taskdef(name: 'hibernatetool', 
            classname: 'org.hibernate.tool.ant.HibernateToolTask', 
            classpath: configurations.compile.asPath )

        hibernatetool( destdir : "$base" ) { 

            jdbcconfiguration(
                propertyfile:"src/main/resources/hibernate.properties", revengfile:"src/main/resources/hibernate.reveng.xml", //expects hibernate.cfg.xml instead
                packagename: springProperties["hibernate.generate.package"], detectmanytomany:"true" ) 

            hbm2java(ejb3:true)
        } 
    }
  }
}

Свойство revengfile переопределяет propertyfile. Я проверил документация, есть пример с hibernate.reveng.xml, но на самом деле он работает только с файлом hibernate.cfg.xml.

Это мой файл hibernate.cfg.xml:

<?xml version = "1.0" encoding = "utf-8"?>
<!DOCTYPE hibernate-configuration 
    SYSTEM "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">


  <hibernate-configuration>
    <session-factory>
        <property name = "hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name = "hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name = "hibernate.connection.url">jdbc:mysql://0.0.0.0:3308/db</property>
        <property name = "hibernate.connection.username">user</property>
        <property name = "hibernate.connection.password">pw</property>
        <property name = "hibernate.current_session_context_class">thread</property>
        <property name = "hibernate.connection.zeroDateTimeBehavior">convertToNull</property>
    </session-factory>

  </hibernate-configuration>

Мой файл hibernate.reveng.xml:

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE hibernate-reverse-engineering
    SYSTEM "http://hibernate.org/dtd/hibernate-reverse-engineering-3.0.dtd">

<hibernate-reverse-engineering>

   <schema-selection match-catalog = ".*" match-schema = ".*" match-table = ".*" />

   <table schema = "db" name = "string" class = "StringEntity"></table> 

</hibernate-reverse-engineering>
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
348
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мне это кажется ошибкой, поскольку revengfile должен ожидать hibernate.reveng.xml вместо файла hibernate.cfg.xml. Для всех, кто сталкивается с подобной проблемой, я нашел альтернативное решение для настройки конфигурации для обратного проектирования. Свойство reversestrategy в jdbcconfiguration ожидает класс, расширяющий org.hibernate.cfg.reveng.DelegatingReverseEngineeringStrategy.

Это моя реализация на Java для обратного проектирования:

public class HibernateReverseEngineeringStrategy extends DelegatingReverseEngineeringStrategy {

public HibernateReverseEngineeringStrategy(ReverseEngineeringStrategy delegate) {
    super(delegate);
}

@Override
public String tableToClassName(TableIdentifier tableIdentifier) {
    return super.tableToClassName(tableIdentifier) + "Entity";
}

}

И это моя задача Gradle Ant:

task hibernate{
description "Generates Java Classes from the Database Schema."
group "Hibernate"

doLast{
    ant {
        def base = "$projectDir/src/main/java"

        taskdef(name: 'hibernatetool', 
            classname: 'org.hibernate.tool.ant.HibernateToolTask',
            classpath: configurations.compile.asPath )

        hibernatetool( destdir : "$base") { 

            // needs to be specified in order to find the java class
            classpath{
                path(location:"${buildDir}/classes/java/main/")
            }

            jdbcconfiguration(
                propertyfile:"src/main/resources/hibernate.properties", 
                reversestrategy:"mypackage.HibernateReverseEngineeringStrategy",
                packagename: springProperties["hibernate.generate.package"]
            ) 

            hbm2java(ejb3:true)
        } 
    }
}

}

Другие вопросы по теме