0

私は現在ここで問題に直面しており、皆さんの何人かが私を助けてくれると思いました。SPRING と HIBERNATE を使用してアプリケーションを開発していますが、私の問題は次のとおりです。

1 - 最初にメイン オブジェクトに新しい AudioFile オブジェクト (Domain クラス) を作成し、DAO の hibernateTemplate.save(audioFile) メソッドを使用してデータベースに挿入します。

2 - 次に、DAO の hibernateTemplate.get(1) メソッドを使用してデータベースから行を取得し、インスタンスを audioFile1 オブジェクトに格納します。(タイプ AudioFile)

3 - 次に、ステップ 2を繰り返して、インスタンスを audioFile2 オブジェクトに格納します。

要約すると、私のメインクラスは次のようになります。

ApplicationContext context = new ClassPathXmlApplicationContext(
                "application-context.xml");
AudioFileServices audioFileServices = (AudioFileServices) context.getBean("audioFileServices");

AudioFile audioFile = new AudioFile();
audioFile.setAlbum("test");
audioFile.setArtist("test");
audioFile.setLength(1);
audioFile.setPath("test");
audioFile.setTitle("test");

AudioFile a1 = null;
AudioFile a2 = null;

try {
    audioFileServices.saveAudioFile(audioFile);
    a1 = audioFileServices.getAudioFile(audioFile.getIdAudioFile());
    a2 = audioFileServices.getAudioFile(audioFile.getIdAudioFile());
} catch (Exception e) {
    e.printStackTrace();
}

問題: audioFile1 と audioFile2 はどちらも同じオブジェクト (データベース内の同じ行) を表していますが、これらは 2 つの異なるインスタンスであり、同じインスタンスを参照する 2 つのオブジェクトではありません。(そうであってほしい) したがって、最初のオブジェクトに変更を加えても、2 番目のオブジェクトには影響しません。(両方とも同じデータベース行にマップされていますが)

AudioFileDAO Bean を AudioFileService Bean に挿入するようにアプリケーション コンテキストを適切に構成し、サービス レイヤー アーキテクチャを使用しています。この厄介な問題を除いて、すべてが完全に機能します。また、トランザクションをセットアップし、SPRING によって AudioFileDAO Bean に注入された sessionFactory Bean も使用しています。

ここで何が欠けているか知っている人はいますか?多分それはHIBERNATE構成の問題ですか?何か案は?

前もって感謝します。(必要に応じて、アプリケーション コンテキスト、サービス、dao コードのコピーを提供できます)

4

2 に答える 2

0

メソッド getAudioFile から取得する代わりに、set a2 = a1 はどうですか。

于 2012-05-03T22:56:46.337 に答える
0

これは、Hibernate が取得したオブジェクトのインスタンスをキャッシュしていないことが原因である可能性があります。休止状態の構成を調べます

于 2012-05-03T23:05:28.453 に答える