0

Spring+Hibernate+Struts アプリケーションに PROPAGATION_REQUIRED 宣言型トランザクション管理アプローチを使用しました。StaleObjectExceptionサービス呼び出しが行われた場所 (トランザクションが開始された場所) で (意図した) をキャッチできます。サービス メソッドには、更新を実行するネストされた呼び出し Foo1、Foo2、Foo3 があります。これらのメソッドで例外をキャッチしたい。どうすればそうできますか?代替手段または回避策はありますか?

4

1 に答える 1

4

この例外をキャッチするべきではありません。Hibernateリファレンスドキュメントから:

セッションがSQLExceptionを含む例外をスローした場合は、データベーストランザクションをすぐにロールバックし、Session.close()を呼び出して、Sessionインスタンスを破棄します。セッションの特定のメソッドは、セッションを一貫した状態のままにしません。Hibernateによってスローされた例外は、回復可能として扱うことはできません。

つまり、例外をキャッチして変換したり、別の種類の例外にラップしたりする以外に、例外をキャッチしても効果はありません。セッションを使用した後は、とにかく期待どおりに機能しません。

ロックの処理方法(JPA)を参照してください。楽観的ロック例外処理が説明されている別の質問。

于 2011-08-26T13:33:07.407 に答える