Вопрос

У меня есть несколько файлов *.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"/>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top