私はSpringとHibernateを使用しています。取引のためのAtomikos。私は注釈ベースのトランザクションを使用します。私はDAOオブジェクトを持っていて、メソッドの1つでは、オブジェクトを保存するためにentityManager.persist()を呼び出します。 更新中にORAエラーが発生すると、たとえば、制約違反、または列の1つがデータベース内で定義されたワット数を超えるなど、SpringによってスローされるGenericJDBCExceptionではなくJTAUnexpectedRollbackExceptionが発生します。 私はそれをキャッチするために試してみることを試みたが、私はそこに例外を取得していない。 Hibernateは、トランザクションのコミット中に発生するフラッシュ中の実際の更新ステートメントを実行していると思われます。したがって、UnexpectedRollbackExceptionが発生します。HibernateのフラッシュとJTAUnexpectedRollbackException
これを回避し、UnexpectedRollbackExceptionの代わりにGenericJDBCExceptionを取得するにはどうすればよいですか?
JTAUnexpectedRollbackExceptionの代わりにGenericJDBCExceptionを取得することが重要なのはなぜですか?なぜトランザクションがコミットするのではなく、永続性に関する例外をキャッチしたいのですか? –
私のライブラリを呼び出すクライアントがUnexpectedRollbackを取得すると、何が間違っているかの手がかりがないので、GenericJDBCExceptionはSQLExceptionのスタックトレースを表示しますが、ロールバック例外には完全なスタックトレースがありません。 – Arvind
トランザクションを管理するためにSpringを使用する利点の一部は、下位のレイヤーにかかわらず一様な例外を持っています。 –