0

Hibernate と Spring (プログラム構成) に基づく Web プロジェクトがあります。Hibernate マッピングは、JAR にアーカイブされたパッケージで提供されます。

セッションファクトリを初期化するときは、次のように呼び出していました。

sessionFactory.
    setMappingDirectoryLocations(new Resource[]{
        new ClassPathResource("org/all/theway/to/hibernatemappings")});

マッピングファイルを探す場所をHibernateに伝えるため。「org/all/theway/to/hibernatemappings」は、hbm.xml ファイルを含むパッケージです。マッピングを含むプロジェクトもチェックアウトされ、私の Web プロジェクトにリンクされているため、これは Eclipse (GWT 開発モード) 内で正常に機能しました。ただし、war を作成して Tomcat にデプロイすると、クラスパス リソースの取得に失敗します。

Spring の ClasspathResource javadoc は次のことを暗示しています

しかし、代わりに何をしますか?代わりに setMappingJarLocation を使用することもできますが、Spring コンテキストで jar ファイル名をハードコードするのは好きではありません。さらに、試してみると、これも IDE 内でしか機能しませんでしたが、Tomcat 内では同じファイル パス (WEB-INF/lib/file.jar) が機能しませんでした。これはまた、これはい解決策になると私に信じさせます。

jar ファイルを使用せずに機能する回避策はありますか?

4

2 に答える 2

1

これは機能します

//すべてのアプリケーション コンテキストは ResourcePatternResolver を実装します

ResourcePatternResolver resourcePatternResolver= applicationContext;
sessionFactory.setMappingDirectoryLocations(resourcePatternResolver.getResources("classpath*:org/all/theway/to/hibernatemappings/*.hbm.xml"));

編集: DefaultResourceLoader を ResourcePatternResolver に置き換えました。

于 2011-11-23T18:26:05.740 に答える
0

実際には元の問題の解決策ではありませんが、構成コード内のjarファイルのファイルシステムファイル名の処理を回避するworkarounnd:

問題のJARをWEB-INF/classesフォルダーに解凍するようにantに指示しただけです。

<target name="unpack.hibernatemappings">
    <unzip dest="${war.dir}/WEB-INF/classes">
        <fileset dir="${lib.dir}">
            <include name="archive-containing-the-hbm-files.jar"/>
        </fileset>
    </unzip>
</target>

これで、Hibernateマッピングはファイルシステムに常駐し、ClassPathResourceとしてアクセスできます(質問の例のように)。

于 2011-11-24T15:24:05.657 に答える