当前位置: 首页 > 知识库问答 >
问题:

使用Hibernate工具定制模板从Gradle进行逆向工程

艾学海
2023-03-14

使用HiberNate ant任务从Gradle我能够生成实体类从数据库使用留档在http://docs.jboss.org/tools/latest/en/hibernatetools/html_single/index.html#d0e5102

当我更改模板templateprefix时,HiberNate找不到我的自定义模板。可以肯定的是,我直接从hiberNate jars复制了模板,并在Pojo.ftl.中添加了一个注释

这是我正在使用Hibernate模板的Gradle构建文件。。。在工作构建文件下面是失败的构建文件,除了模板模板前缀之外,该文件是相同的。

apply plugin: 'java'

repositories {
    mavenCentral()
}

configurations {
    reverseMap
}

dependencies {
    reverseMap 'org.hibernate:hibernate-tools:4.0.0-CR1'
    reverseMap 'org.slf4j:slf4j-simple:1.7.5'
    reverseMap files('/Users/jzwolak/local/lib/ojdbc6-11.2.0.2.0.jar')
    compile 'javax:javaee-api:7.0'
}

project.ext {
    hibernateRevEngXml = "$projectDir/config/hibernate.reveng.xml"
    hibernateDestDir = file("$buildDir/generated")
}

task reverseMap {
    inputs.files hibernateRevEngXml
    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/config/hibernate.cfg.xml",
                        revengfile:hibernateRevEngXml,
                        packagename:
                                "com.mybiz"
                        //reversestrategy="ReverseEngineeringStrategy classname"
                        //detectmanytomany="true|false"
                        //detectoptmisticlock="true|false"
                )
                hbmtemplate(
                    templateprefix:"pojo/" ,
                    template:"pojo/Pojo.ftl", 
                    filepattern:"{package-name}/{class-name}.java"
                ) {
                    property(key:"jdk5",value:"true")
                    property(key:"ejb3",value:"true")
                }
                /*
                hbm2java(
                        jdk5: true,
                        ejb3: true
                )
                */
                // Adds the config directory to the path so that log4j can pick up
                // its properties file.
                classpath {
                    pathelement( path: "config" )
                }
            }
        }
    }
}

compileJava.source reverseMap.outputs.files, sourceSets.main.java

这是失败的构建文件。

apply plugin: 'java'

repositories {
    mavenCentral()
}

configurations {
    reverseMap
}

dependencies {
    reverseMap 'org.hibernate:hibernate-tools:4.0.0-CR1'
    reverseMap 'org.slf4j:slf4j-simple:1.7.5'
    reverseMap files('/Users/jzwolak/local/lib/ojdbc6-11.2.0.2.0.jar')
    compile 'javax:javaee-api:7.0'
}

project.ext {
    hibernateRevEngXml = "$projectDir/config/hibernate.reveng.xml"
    hibernateDestDir = file("$buildDir/generated")
}

task reverseMap {
    inputs.files hibernateRevEngXml
    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/config/hibernate.cfg.xml",
                        revengfile:hibernateRevEngXml,
                        packagename:
                                "com.mybiz"
                        //reversestrategy="ReverseEngineeringStrategy classname"
                        //detectmanytomany="true|false"
                        //detectoptmisticlock="true|false"
                )
                hbmtemplate(
                    templateprefix:"templates/custom_pojo/" ,
                    template:"templates/custom_pojo/Pojo.ftl", 
                    filepattern:"{package-name}/{class-name}.java"
                ) {
                    property(key:"jdk5",value:"true")
                    property(key:"ejb3",value:"true")
                }
                /*
                hbm2java(
                        jdk5: true,
                        ejb3: true
                )
                */
                // Adds the config directory to the path so that log4j can pick up
                // its properties file.
                classpath {
                    pathelement( path: "config" )
                }
            }
        }
    }
}

compileJava.source reverseMap.outputs.files, sourceSets.main.java

这是目录树

build.gradle
config
|    hibernate.cfg.xml
|    hibernate.reveng.xml
|    log4j.properties
templates
|    custom_pojo
|    |    Ejb3PropertyGetAnnotation.ftl
|    |    Ejb3TypeDeclaration.ftl
|    |    GetPropertyAnnotation.ftl
|    |    Pojo.ftl
|    |    PojoConstructors.ftl
|    |    PojoEqualsHashcode.ftl
|    |    PojoExtraClassCode.ftl
|    |    PojoFields.ftl
|    |    PojoInterfacePropertyAccessors.ftl
|    |    PojoPropertyAccessors.ftl
|    |    PojoToString.ftl
|    |    PojoTypeDeclaration.ftl
|    |    test.ftl

这里是错误

[ant:hibernatetool] org.hibernate.tool.hbm2x.ExporterException: Error while processing Entity: com.mybiz.TsModelRealizationView with template templates/custom_pojo/Pojo.ftl
[ant:hibernatetool] java.io.FileNotFoundException: Template templates/custom_pojo/Pojo.ftl not found.
:reverseMap FAILED

我已经尝试添加.模板到类路径,以及config,它已经在类路径中并且正在工作。

我已经尝试了很多组合,用于templatetemplateprefix,但唯一有效的组合是第一次构建中的组合。上面是格雷德尔档案。

更新

我尝试了templateprefixtemplate的绝对路径,得到了相同的文件not found错误。

共有2个答案

葛兴发
2023-03-14

虽然有点晚,但如果仍然有帮助的话,这是另一种指定模板基本路径的方法:

改变这一点:

hibernatetool( destdir : hibernateDestDir )

致:

hibernatetool( destdir : hibernateDestDir, templatepath : 'templates' )

模板部分应该是:

templateprefix:"custom_pojo/" ,
template:"custom_pojo/Pojo.ftl", 
施飞鸿
2023-03-14

添加

reverseMap files('.')

你的依赖。

 类似资料:
  • 我正在Eclipse Neon中使用Hibernate工具(JBoss tools 4.4.0.Final)。现在,我想将数据库表反向工程为POJO对象和Hibernate映射文件。 我遵循了一些关于如何设置Eclipse来生成POJO对象的教程。在我运行配置之前,一切看起来都很好。什么都没发生,也没有抛出错误。有人能帮我吗?数据库是一个微软SQL服务器2014。 我的逆向工程配置文件看起来像:

  • 我想使用Hibernate和Gradle从现有数据库生成POJO。Gradle可以轻松调用Ant任务,Hibernate为逆向工程数据库提供了Ant任务。 我在网上找到了这个旧的Gradle任务定义,并将其修改为最新版本的Gradle,但它不起作用: 我得到了一个错误: 我如何修改它以从数据库生成模式文件?(我知道这还不会生成POJO,但这是第一步!) 我的依赖项看起来像:

  • 逆向工程 是模型其中一个主要功能。这功能让你加载现有的数据库结构以创建新的图表。它支持导入 MySQL、 PostgreSQL、Oracle、SQLite、SQL Server 或 MariaDB 数据库、模式、表或视图。 Navicat 提供一个步骤的向导让你完成任务: 选择 工具 -> 从数据库导入。 选择连接。 选择你要导入的数据库、模式或表。 点击 开始。 你也可以简单地在 Navicat

  • 逆向工程是模型的其中一个主要功能。这功能让你加载现有的数据库结构以创建新的图表。它支持导入数据库、模式、表或视图。 Navicat 提供一个向导,一步一步指导你完成任务: 选择“文件”->“从数据库导入”。 选择一个连接。 选择你要导入的数据库、模式、表或视图。 点击“开始”。 你也可以简单地在 Navicat 主窗口使用逆向工程创建一个新模型。右击一个已打开的数据库或模式、表或视图并在弹出式菜单

  • 逆向工程是模型的其中一个主要功能。这功能让你加载现有的数据库结构以创建新的图表。它支持导入数据库、模式、表或视图。 Navicat 提供一个向导,一步一步指导你完成任务: 选择“文件”->“从数据库导入”。 选择一个连接。 选择你要导入的数据库、模式、表或视图。 点击“开始”。 你也可以简单地在 Navicat 主窗口使用逆向工程创建一个新模型。按住 Control 键并点按一个已打开的数据库或模

  • 逆向工程是模型的其中一个主要功能。这功能让你加载现有的数据库结构以创建新的图表。它支持导入数据库、模式、表或视图。 Navicat 提供一个向导,一步一步指导你完成任务: 选择“文件”->“从数据库导入”。 选择一个连接。 选择你要导入的数据库、模式、表或视图。 点击“开始”。 你也可以简单地在 Navicat 主窗口使用逆向工程创建一个新模型。右击一个已打开的数据库或模式、表或视图并在弹出式菜单