【问题标题】:Hibernate Tools reverse engineering with Gradle使用 Gradle 进行 Hibernate Tools 逆向工程
【发布时间】:2021-05-14 01:06:52
【问题描述】:

当我使用 Eclipse 作为我的 IDE 时,我曾经使用 Hibernate Tools 对数据库进行逆向工程以获取我的实体,并带有注释。

我最近迁移到 IntelliJ IDEA,我认为它是一个总体上更好的 IDE,但不幸的是它没有 Hibernate Tools 的端口,所以我无法像以前那样生成我的实体。我知道 IntelliJ IDEA 有自己的逆向工程工具(可通过Persistence->Generate Persistence Mapping->By Database Schema 访问),但我发现它有些错误,有时会生成完全错误的实体。

我知道 Hibernate Tools 也可以从 Ant 中使用。是否也可以从 Gradle 中使用它?

【问题讨论】:

    标签: java hibernate gradle ant hibernate-tools


    【解决方案1】:

    感谢this question,我设法使用了 Gradle 的 Hibernate 工具。

    事实证明(我不知道)Gradle 确实能够调用 Ant 任务,因此可以使用预先存在的 Hibernate Tools Ant 任务对数据库进行逆向工程。

    为此,需要有一个hibernate.cfg.xml 文件,其中包含告诉Ant 询问如何访问我们的数据库所需的配置。这是一个例子:

    <?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://localhost:3306/mydb
            </property>
            <property name="hibernate.connection.username">
                username
            </property>
            <property name="hibernate.connection.password">
                password
            </property>
        </session-factory>
    </hibernate-configuration>
    

    (IntelliJ 可能会抱怨这个文件,告诉它找不到驱动程序,但这没关系,因为它们将在执行期间由 Gradle 提供)

    这个配置文件将被从 Gradle 调用的 Ant 任务使用。我把它放在一个新的db 文件夹中,在项目根目录中创建。

    build.gradle文件需要添加以下内容:

    configurations {
        reverseMap
    }
    
    dependencies {
        //...your other dependencies...
        reverseMap 'org.hibernate:hibernate-core:4.0.1.Final'
        reverseMap 'org.hibernate:hibernate-tools:4.0.1.Final'
        reverseMap 'org.slf4j:slf4j-simple:1.7.5'
        reverseMap 'mysql:mysql-connector-java:5.1.48'
    }
    
    project.ext {
        hibernateDestDir = file("$projectDir/src/main/java")
    }
    
    task reverseMap {
        outputs.dir hibernateDestDir
        doLast {
            hibernateDestDir.exists() || hibernateDestDir.mkdirs()
            ant {
                taskdef(
                    name: 'hibernatetool',
                    classname: 'org.hibernate.tool.ant.HibernateToolTask',
                    classpath: configurations.reverseMap.asPath
                )
                hibernatetool(destdir: hibernateDestDir) {
                    jdbcconfiguration(
                        configurationfile: "$projectDir/db/hibernate.cfg.xml",
                        packagename: "com.me.models"
                    )
                    hbm2java(
                        jdk5: true,
                        ejb3: true
                    )
                }
            }
        }
    }
    
    

    此代码创建了一个名为reverseMap 的新配置,可用于声明reverseMap 任务所需的依赖项(需要hibernate-core、hibernate-tools 和log4j,而驱动程序应该是您的 DBMS 需要一个)。

    reverseMap 代码调用 Ant 任务,基本遵循the official guide。感兴趣的部分是hbm2java,它是实际的出口商。其余代码基本上是 Ant 任务和配置的胶水代码。

    可以从命令行 (./gradlew reverseMap) 或 IntelliJ 调用 Gradle 任务。

    【讨论】:

      猜你喜欢
      • 2011-03-13
      • 2012-03-10
      • 1970-01-01
      • 2011-02-20
      • 1970-01-01
      • 2015-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多