質問: データベースに存在しないレコードを削除する際にorg.hibernate.StaleObjectStateExceptionをキャッチできません 私のアプリケーションには、ユーザーの削除オプションがあります。今、並行性の条件をチェックするために、私は次のユースケースを試しました 1. クロームとFirefoxブラウザでアプリケーションを開いた。 2. Firefoxで削除されたユーザー 3. クロムブラウザで同じユーザーを削除しようとしています。存在しないオブジェクトを削除しようとしているので、例外は `org.hibernate.StaleObjectStateException` しかし、私はこの例外を捕まえることができません。 ``` try{ getHibernateTemplate().delete(userObj); } catch (StaleObjectStateException e) { e.printStackTrace(); } ``` どのように私はこの例外をキャッチしますか?
回答: 例外をスローするのは削除呼び出しではなく、後で実行される(クエリの実行前またはトランザクションのコミット前に)セッションのフラッシュですので、そこにキャッチすることはできません。 Hibernateが例外をスローすると、セッションをもう使用できなくなるため、この例外は捕捉してはいけません。これは不安定な状態です。そのような例外がキャッチされるアプリケーションの唯一の部分は、エラーメッセージをユーザーに表示するため(または再試行しますが、この特定の場合は不可能です)、トランザクションの外にあります。