当前位置: 首页 > 面试题库 >

如何使用Maven配置hibernate-tools以生成hibernate.cfg.xml,*。hbm.xml,POJO和DAO

胡霖
2023-03-14
问题内容

有谁能告诉我如何强制Maven在具有包路径的自动生成的hibernate.cfg.xml文件中映射.hbm.xml文件之前?

我的总体想法是,我想通过maven使用hibernate-
tools为我的应用程序生成持久层。因此,我需要hibernate.cfg.xml,然后是所有my_table_names.hbm.xml,最后需要生成POJO。但是,hbm2java当我将*
.hbm.xml文件放入src/main/resources/package/path/文件夹时,该目标将无法实现,而是hbm2cfgxml仅通过表名指定映射文件,即:

<mapping resource="MyTableName.hbm.xml" />

因此,最大的问题是:如何进行配置hbm2cfgxml使hibernate.cfg.xml如下所示:

<mapping resource="package/path/MyTableName.hbm.xml" />

我的pom.xml目前看起来像这样:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>hibernate3-maven-plugin</artifactId>
    <version>2.2</version>
    <executions>
        <execution>
            <id>hbm2cfgxml</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>hbm2cfgxml</goal>
            </goals>
            <inherited>false</inherited>
            <configuration>
                <components>
                    <component>
                        <name>hbm2cfgxml</name>
                        <implemetation>jdbcconfiguration</implementation>
                        <outputDirectory>src/main/resources/</outputDirectory>
                    </component>
                </components>
                <componentProperties>
                    <packagename>package.path</packageName>
                    <configurationFile>src/main/resources/hibernate.cfg.xml</configurationFile>
                </componentProperties>
            </configuration>
        </execution>
    </executions>
</plugin>

然后是第二个问题:有没有办法告诉Maven在执行之前将资源复制到目标文件夹hbm2java?目前我正在使用

mvn clean resources:resources generate-sources

为此,但必须有更好的方法。

谢谢你的帮助。

更新:

@Pascal:
谢谢您的帮助。映射的路径现在可以正常工作了,但是我不知道以前出了什么问题。从其读取数据库配置时写入hibernate.cfg.xml可能存在一些问题(尽管文件已更新)。

我已经删除了文件hibernate.cfg.xml,将其替换为database.properties并运行目标hbm2cfgxmlhbm2hbmxml。在这些目标中,我也不再使用“
outputDirectory或” configurationfile

结果,文件hibernate.cfg.xml和所有文件*.hbm.xml都被生成到我的target / hibernate3 /
generated-mappings /文件夹中,这是默认值。然后,我hbm2java使用以下内容更新了目标:

<componentProperties>
    <packagename>package.name</packagename>
    <configurationfile>target/hibernate3/generated-mappings/hibernate.cfg.xml</configurationfile>
</componentProperties>

但是然后我得到以下信息:

[INFO] --- hibernate3-maven-plugin:2.2:hbm2java (hbm2java) @ project.persistence ---
[INFO] using configuration task.
[INFO] Configuration XML file loaded: file:/C:/Documents%20and%20Settings/mmm/workspace/project.persistence/target/hibernate3/generated-mappings/hibernate.cfg.xml
12:15:17,484  INFO org.hibernate.cfg.Configuration - configuring from url: file:/C:/Documents%20and%20Settings/mmm/workspace/project.persistence/target/hibernate3/generated-mappings/hibernate.cfg.xml
12:15:19,046  INFO org.hibernate.cfg.Configuration - Reading mappings from resource : package.name/Messages.hbm.xml
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.codehaus.mojo:hibernate3-maven-plugin:2.2:hbm2java (hbm2java) on project project.persistence: Execution hbm2java of goal org.codehaus.mojo:hibernate3-maven-plugin:2.2:hbm2java failed: resource: package/name/Messages.hbm.xml not found

我该如何处理?我当然可以添加:

<outputDirectory>src/main/resources/package/name</outputDirectory>

达到hbm2hbmxml目标,但我认为这不是最佳方法,不是吗?有没有办法使 所有 生成的代码和资源都远离src/文件夹?

我认为,此方法的目标不是在src / main / java或/
resources文件夹中生成任何源,而是将生成的代码保留在目标文件夹中。正如我通常同意这一观点的那样,我想继续进行最终的执行hbm2dao和打包,以将其用作业务层中生成的持久层组件。这也是你的意思吗?


问题答案:

如何配置hbm2cfgxml,以便hibernate.cfg.xml看起来像下面的(…)

我有一个使用项目hbm2cfgxml<mapping resource="..."/>项目办反映路径的包名hbm.xml。所以很明显您这边出了问题。这里有几点评论:

  • 我想绑定hbm2cfgxmlgenerate-resources阶段,你不会产生源
  • 我不会在其中生成文件,src/main/resources但会在其中生成文件target/classses(为什么将生成的内容放入源代码树中,所以您希望对其clean进行清理)。
  • 有一个错字configurationfile,不是,configurationFile而是…
  • 为什么<configurationfile>在配置中有一个hbm2cfgxml?您想在这里生成它…我将其删除。

更新:
您应该将连接到数据库所需的信息放在src/main/resources/database.properties(这是propertyfile属性的默认值)中,而不是在src/main/resources/hibernate.cfg.xml(删除该文件)中。下面是一个样本database.properties

hibernate.connection.driver_class=org.apache.derby.jdbc.ClientDriver
hibernate.connection.url=jdbc:derby://localhost:1527//home/pascal/Projects/derbyDBs/EMPLDB
hibernate.connection.username=APP
hibernate.connection.password=APP
hibernate.dialect=org.hibernate.dialect.DerbyDialect

就像我说的,删除src/main/resources/hibernate.cfg.xml文件,您想生成它。

有没有一种方法可以告诉maven在执行hbm2java之前将资源复制到目标文件夹?(…)

hbm2java目标 之前,执行自身调用的生命周期阶段过程资源的执行
(从文档)。所以这是默认行为,并发生hibernate3:hbm2java或者generate-sources 如果
hbm2java被绑定到它。



 类似资料:
  • 问题内容: 我正在使用:Eclipse Java EE IDE Web开发人员版本:靛蓝发行 使用hibernate工具,我是第一次在Eclipse中hibernate,因此我学习了如何配置hibernate并生成带有注释的POJO(我认为它比.xml更好)。 因此,在生成我的POJO和DAO之后,我尝试进行插入,但是对我的实体管理器启动了“空点异常”,这就是hibernate工具生成dao类的方

  • 问题内容: 我如何获得Spring来从中加载Hibernate的属性? 我们正在使用Spring和JPA(以Hibernate作为实现)。Spring 指定了JPA语言和Hibernate属性: 在这种配置中,Spring通过applicationContext.xml读取所有的Hibernate属性。当我创建一个(位于我的类路径的根,与META- INF处于同一级别)时,Hibernate根本不

  • 问题内容: 大家好,我是hibernate的初学者,我知道这里有很多类似的问题。我试图从他们那里解决,但我做不到。我还试图在dtd中将SYSTEM从PUBLIC更改为,但是它不起作用。我用谷歌搜索它,但是到处都显示dtd语句错误。 这是我的配置文件。 我尝试将版本3.0更改为4.0,因为我正在使用hibernate版本4.3.6,但仍无法正常工作。请帮帮我。 这是我的userDetails类。 软

  • 嘿,伙计们,我是冬眠的初学者,我知道这里有很多类似的问题。我试图从他们那里解决问题,但我做不到。我还试图在dtd中更改公共系统,但它不起作用。我在google上搜索了它,但它显示的每个地方都有dtd语句错误。 这是我的配置文件。 我尝试将版本3.0更改为4.0,因为我使用的是hibernate版本4.3.6,但它仍然不起作用。请帮帮我。 这是我的用户详细信息类... 包装组织。冬眠src; 我已将

  • 问题内容: 我是否可以知道Eclipse插件的Hibernate工具可用于生成JPA实体@entity?生成的Java文件如下所示,而不是JPA: 问题答案: 生成时,只需选择EJB3 + Java5作为配置选项。 了解更多信息:http : //docs.jboss.org/tools/4.0.0.Final/zh/hibernatetools/html_single/index.html#jp

  • 问题内容: 如何使Grails 3.1.1用户成为Hibernate 5? 以下操作报告了Hibernate版本4.3.11.Final:在Grails 3.1.1中 grails创建应用hello311 编辑BootStrap.groovy,如下所示 Grails运行应用 控制台显示:Hibernate版本为:4.3.11.Final 我的build.gradle未编辑。create-app命令