Hibernate:別のフォルダーに* .hbm.xmlファイルをマップする方法
-
03-07-2019 - |
質問
hibernate.cfg.xmlファイルと同じフォルダーに配置されている* .hbm.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
その後、Markが提案したように、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>
[解決済み]
結論は、私は本当に愚かだったということです。別のディレクトリにいることとは関係ありません。一度に2つのテストフェーズを変更していたので、私は混乱しました。そして、私はそれをすべて無実の「ディレクトリ変更」のせいにしました。みんなの時間を無駄にしてすみません。
誰かが興味を持っているなら、ここで何が起こったのでしょうか。ローカルDTDファイルを使用してXSLT変換を行い、XSLファイル内の相対パスでローカルDTDファイルを指定しました。しかし、生成された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
解決
Hibernateの一般的な使用法については、モーリスが提案した変更に同意しますが、さらに説明するつもりでした。 Hibernateマッピングファイルは、クラスパスからリソースとしてロードされます。クラスパスに$ {base.configuration.hibernate.dir}があるため、これに関連するマッピングファイルのパスを指定する必要があります。したがって、先頭の/は削除する必要があります。
antのスキーマエクスポートツールを使用するには、 docs は、マッピングファイルがクラスパスで見つかることを期待するのではなく、ファイルセットとして定義する必要があると述べています。
をご覧ください他のヒント
<mapping resource="dir/B.hbm.xml"/>