Спящий режим:Как сопоставить файл *.hbm.xml в другой папке?
-
03-07-2019 - |
Вопрос
У меня есть несколько файлов *.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, как предложил Марк.Тогда он даже больше не мог найти мой «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
Решение
Что касается общего использования Hibernate, я согласен с изменением, предложенным Морисом, но подумал, что дам больше объяснений.Файлы сопоставления Hibernate загружаются как ресурсы из пути к классам.Поскольку в вашем пути к классам есть ${base.configuration.hibernate.dir}, вы должны указать путь к файлу сопоставления относительно этого, поэтому переднюю часть / следует удалить.
Для использования инструмента экспорта схемы из ant документы скажем, что вам следует определить файлы сопоставления как набор файлов, а не ожидать, что они будут найдены в пути к классам.Видеть
Другие советы
<mapping resource="dir/B.hbm.xml"/>