Hibernate:如何将* .hbm.xml文件映射到不同的文件夹中?

时间:2009-03-05 21:43:08

标签: hibernate nhibernate-mapping schemaexport hibernate.cfg.xml

我有一些* .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

然后我继续尝试添加到我的schemaexpoert中,如Mark建议的那样。然后它甚至不会再找到我的“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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

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

为了使用ant中的模式导出工具,docs表示您应该将映射文件定义为文件集,而不是期望在类路径中找到它们。见