1

У меня есть файлы * .hbm.xml, которые находятся в той же папке в файле hibernate.cfg.xml. Теперь я хочу сопоставить другие файлы * .hbm.xml, которые находятся в подпапке этой папки. Как я могу это сделать? Благодаря!Hibernate: Как скопировать файл * .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} 



[Edit]

я впервые попробовал и не удалось, как предложил Морис изменил строку

<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. И по какой-то глупой причине я думал, что следующие совершенно разные сообщения об ошибках означают одно и то же ... Большое спасибо 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 
+0

Можете вы добавить сообщения об ошибках, которые вы получили? – Mark

ответ

3

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

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

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

пробовал это ... к сожалению, все еще не работает ... – tomato

 Смежные вопросы

  • Нет связанных вопросов^_^