Spring+Hibernate+Struts アプリケーションに PROPAGATION_REQUIRED 宣言型トランザクション管理アプローチを使用しました。StaleObjectException
サービス呼び出しが行われた場所 (トランザクションが開始された場所) で (意図した) をキャッチできます。サービス メソッドには、更新を実行するネストされた呼び出し Foo1、Foo2、Foo3 があります。これらのメソッドで例外をキャッチしたい。どうすればそうできますか?代替手段または回避策はありますか?
質問する
1472 次
1 に答える
4
この例外をキャッチするべきではありません。Hibernateリファレンスドキュメントから:
セッションがSQLExceptionを含む例外をスローした場合は、データベーストランザクションをすぐにロールバックし、Session.close()を呼び出して、Sessionインスタンスを破棄します。セッションの特定のメソッドは、セッションを一貫した状態のままにしません。Hibernateによってスローされた例外は、回復可能として扱うことはできません。
つまり、例外をキャッチして変換したり、別の種類の例外にラップしたりする以外に、例外をキャッチしても効果はありません。セッションを使用した後は、とにかく期待どおりに機能しません。
ロックの処理方法(JPA)を参照してください。楽観的ロック例外処理が説明されている別の質問。
于 2011-08-26T13:33:07.407 に答える