1

私はいくつかの* .hbm.xmlファイルをhibernate.cfg.xmlファイルの同じフォルダに配置しています。今、このフォルダのサブフォルダにある他の* .hbm.xmlファイルをマップしたいと思います。どうすればいい?ありがとう!Hibernate:* .hbm.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ファイルの一部です:

は、ここに私のhibernate.cfg.xmlの一部だ

 <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 

をして、私がしようとするようになりましたMarkが提案したように私のschemaexpoertに追加する。それから、私の "A.hbm.xml"ももう見つからないでしょう。エラーを放つ:結論は、私は本当に愚かだったということです

 <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> 



[解決済み]

Schema text failed: Could not parse mapping document from resource A.hbm.xml 

私SchemaExportTaskは今のように見えます。別のディレクトリにいることとは何の関係もありませんでした。一度に2つのことをテスト段階で変更していたので、私は混乱しました。そして、私は無邪気な "ディレクトリの変更"のすべてを非難しました。みんなの時間を無駄にして申し訳ありません。

興味があれば、ここで何が起こったのですか。ローカルのDTDファイルを使用してXSLT変換を行い、ローカルのDTDファイルをXSLファイルの相対パスで指定しました。しかし、私は生成されたhbm.xmlファイルを差分ディレクトリに入れます。したがって、SchemaExportTaskはDTDファイルをもう見つけられず、新しいhbm.xmlファイルを解析できませんでした。そして、いくつかの愚かな理由のために、私は次の全く異なるエラーメッセージが同じことを意味していると思っていました....マークは、人々が正当な理由でエラーメッセージを書いたことを思い出してくれてありがとう!まだfilesetを追加してもまだ動作しませんが、エラーメサージュを読むことを知っています...私はすぐにそれを修正すると確信しています。 =。=「」私はモーリスが示唆されたが、私は説明の多くを与えるだろうと思っ変更に同意する一般的なHibernateの使用方法について

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マッピングファイルは、クラスパスからリソースとしてロードされます。クラスパスに$ {base.configuration.hibernate.dir}があるので、マッピングファイルのパスを相対パスにする必要があります。したがって、front /を削除する必要があります。

docsのスキーマエクスポートツールを使用する場合は、マッピングファイルをクラスパス上に見つけられると予想するのではなく、ファイルセットとして定義する必要があると言います。

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

これは試みました...残念ながらまだ動作しません... – tomato

関連する問題