1

我有一些 *.hbm.xml 文件放在 hibernate.cfg.xml 文件的同一文件夹中。现在,我想映射此文件夹子文件夹中的其他一些 *.hbm.xml 文件。我怎么能做到?谢谢!

这是我的一部分hibernate.cfg.xml

   <hibernate-configuration>
        <session-factory name="MySessionFactory">
             <!-- some hibernate properties here --> 

             <!--This below works fine-->
             <mapping resource="A.hbm.xml"/>

             <!--This doesn't-->
             <mapping resource="/dir/B.hbm.xml"/>

        </session-factory>
   </hibernate-configuration>

这是我的 Ant 文件的一部分:

        <target name="generateHibernateSql">

        <taskdef name="SchemaExportTask"
            classname="org.hibernate.tool.hbm2ddl.SchemaExportTask"
        >
            <classpath>
                <pathelement location="${build.classes.main.dir}"/>
                <pathelement location="${base.configuration.hibernate.dir}"/>
                <path refid="build.classpath.lib"/>
            </classpath>
        </taskdef>

这是我的文件夹结构

${base.configuration.hibernate.dir}
   | hibernate.cfg.xml
   | A.hbm.xml
   |--dir
   |---| B.hbm.xml
${build.classes.main.dir}



[编辑]

正如莫里斯建议的那样,我首先尝试并失败了,将线路改为

 <mapping resource="dir/B.hbm.xml"/>

仍然给出相同的错误:

Schema text failed: Could not parse mapping document from resource dir/B.hbm.xml

然后我继续尝试按照 Mark 的建议添加到我的 schemaexpoert 中。然后它甚至再也找不到我的“A.hbm.xml”了。给出错误:

Schema text failed: Could not parse mapping document from resource A.hbm.xml

我的 SchemaExportTask 现在看起来像:

        <SchemaExportTask
            config="${base.configuration.hibernate.dir}\hibernate.cfg.xml"
            quiet="no"
            text="no"
            drop="no"
            delimiter=";"
            create="yes"
            output="${dist.database.dir}\schema-export.sql"
        >
            <fileset dir="${base.configuration.hibernate.dir}">
                <include name="**/*.hbm.xml"/>
            </fileset>
        </SchemaExportTask>



[解决]

结论是我真的很愚蠢。它与在不同的目录中无关。我很困惑,因为我在测试阶段一次更改了两件事,然后我将这一切归咎于无辜的“目录更改”。很抱歉浪费了大家的时间。

如果有人感兴趣,这就是发生的事情。我使用本地 DTD 文件进行了一些 XSLT 转换,并在我的 XSL 文件中使用相对路径指定了本地 DTD 文件。但是我将生成的 hbm.xml 文件放到了不同的目录中——因此 SchemaExportTask 无法再找到 DTD 文件并且无法解析新的 hbm.xml 文件。由于一些愚蠢的原因,我认为以下完全不同的错误消息意味着相同的事情......非常感谢 Mark 提醒我人们写错误消息是有充分理由的!现在添加fileset仍然不起作用,但我现在知道阅读错误信息......我相信我会尽快修复它。=.=''

Schema text failed: resource: B.hbm.xml not found
Schema text failed: Could not parse mapping document from resource dir/B.hbm.xml
4

2 回答 2

3
<mapping resource="dir/B.hbm.xml"/>
于 2009-03-05T21:51:16.647 回答
3

对于一般的 Hibernate 用法,我同意 Maurice 建议的更改,但我认为我会给出更多解释。Hibernate 映射文件作为资源从类路径加载。由于您的类路径中有 ${base.configuration.hibernate.dir} ,因此您必须提供相对于此的映射文件的路径,因此应该删除前面的 / 。

对于使用 ant 的模式导出工具,文档说您应该将映射文件定义为文件集,而不是期望在类路径中找到它们。看

于 2009-03-05T21:59:28.653 回答