1

Spring 1.2.9 と Hibernate 3.3.1 を使用しています。奇妙なトランザクションの問題が発生しています。私の春の取引設定はこんな感じ

<property name="writeInfo*">PROPAGATION_REQUIRED,readOnly</property>
<property name="getFacilities*">PROPAGATION_REQUIRED,readOnly</property>

writeInfo メソッドは、他の DAO を使用してオブジェクトをクエリし、それらを繰り返し処理し、他の非データ ヘルパー メソッドを呼び出す (ただし、データ オブジェクトを渡すことはできる) サービス レイヤーに似ています。getFacilities は、データベース オブジェクトへのアクセスを必要とする任意のメソッドから呼び出すことができる DAO メソッドです。

私のコード フローは、データをテキスト ファイルにエクスポートする必要がある一連のオブジェクト ID を指定して writeInfo を呼び出すことです。writeInfo メソッドは、これらのオブジェクトを getFacilities DAO メソッドに渡すことでクエリを実行します (writeInfo メソッドを含むプロキシに挿入された DAO プロキシがあります)。getFacilities がオブジェクトのコレクションを返すと、writeInfo メソッドは同じクラス内の他のヘルパー メソッドを呼び出します。これらのメソッドは、これらのオブジェクトとその子オブジェクトを繰り返し処理し、文字列バッファーに書き込みます。

問題は、Spring-Hibernate トランザクション マネージャーでトランザクション ステートメントをデバッグすると、writeInfo メソッドに対してトランザクションが作成され、getFacilities メソッドが writeInfo 内から呼び出されているにもかかわらず、getFacilities メソッドに対して新しいトランザクションが作成されていることがわかります。方法。より大きな問題は、オブジェクトが getFacilities メソッドから返され、writeInfo から他のヘルパー メソッドに渡されるときに、子オブジェクト (メイン オブジェクト内のコレクション) へのアクセスによって、Session Closed が原因で LazyIntialization 例外が発生することです。

writeInfo メソッドによって開始されたトランザクションは、メソッドの最後まで使用可能であるべきではありませんか? getFacility メソッドが新しいトランザクションを作成し、オブジェクトを返すときにトランザクションの後にセッションを閉じるのはなぜですか? これは、Spring のこの特定のバージョンのバグですか、それとも何か間違ったことをしていますか?

どんな助けでも大歓迎です。

4

0 に答える 0