Hibernate: Как сопоставить файл * .hbm.xml в другой папке? - PullRequest
1 голос
/ 06 марта 2009

У меня есть несколько * .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

и затем я попытался добавить в свою схему expoert, как предложил Марк. Тогда он даже не найдет мой "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>



[Решено]

Вывод: я был просто очень глуп. Это не имело никакого отношения к тому, чтобы быть в другом каталоге. Я запутался, потому что я изменял две вещи одновременно на этапе тестирования, а затем обвинил все это в невинной «смене каталога». Извините за трату времени всех.

Если кому-то интересно, вот что случилось. Я выполнил перевод XSLT с использованием локального файла DTD и указал локальный файл DTD с относительным путем в моем файле XSL. Но я поместил сгенерированные файлы hbm.xml в разностный каталог - следовательно, SchemaExportTask больше не может найти файл DTD и не смог проанализировать новые файлы hbm.xml. И по какой-то глупой причине я подумал, что следующие совершенно разные сообщения об ошибках означают одно и то же ... Большое спасибо Марку за напоминание о том, что люди пишут сообщения об ошибках по уважительной причине! Добавление 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 ]

3 голосов
/ 06 марта 2009

Для общего использования Hibernate я согласен с изменением, предложенным Морисом, но подумал, что дам больше объяснений. Файлы отображения Hibernate загружаются как ресурсы из пути к классам. Поскольку у вас есть $ {base.configuration.hibernate.dir} в вашем пути к классам, вы должны указать путь к файлу сопоставления относительно этого, поэтому передний / должен быть удален.

Для использования инструмента экспорта схемы из ant docs скажите, что вы должны определить файлы сопоставления как набор файлов, а не ожидать, что они будут найдены в пути к классам. См

3 голосов
/ 06 марта 2009
<mapping resource="dir/B.hbm.xml"/>
...