質問

この質問を検索しました。StackOverflowとGoogleにはかなりの数の質問がありますが、何も機能していないようです。

これが私のコードです Spring config :(ポイントカットは使用しません-使用する必要はないと思いますか?) ジェネラコディセタグプレ

サービスクラスがあります: ジェネラコディセタグプレ

およびDaoクラス: ジェネラコディセタグプレ

いくつかの不要な詳細が削除されます(たとえば、セッターの欠落など)。コードが完全に正常に機能すると想定します。

上記の問題は、ランダムスロー例外行を追加したときにロールバックせず、DAOを介して永続化されているオブジェクトがデータベースに残ることです。

Spring3.1とHibernate3.6を使用しています(Spring3.1のHibernate4.0にバグがあったため)

考え?

ありがとうございます

役に立ちましたか?

解決 2

問題の原因と、トランザクションが(一見)適切に管理されなかった理由を見つけました。

コードのどこか ジェネラコディセタグプレ

「-ここにいくつかのロジック-」と書かれている部分には、生のSQLを使用し、更新の実行を呼び出すロジックが実行されています。 ジェネラコディセタグプレ

また、Hibernateクエリを使用せず、代わりに生のSQL実行を使用しているため、フラッシュが呼び出され、呼び出し前に行われたすべての作業が それ。

トランザクションが適切に管理されるように、このロジックを考慮してロジックのフローを作り直しました。生のSQLを使用している場合は、何か問題があることを示している可能性があります。サービスが実行しようとしていることや、サービスのパフォーマンスを向上させるために、何かを行う必要がありました。

他のヒント

これは、トランザクション管理の意図された動作です。 @Transactionalのデフォルトの動作は、実行時例外に対してのみロールバックすることです。 DaoExceptionをスローした後にコンテンツをロールバックする場合は、ロールバック例外リストに追加します。RuntimeExceptionも含めることを忘れないでください。 Daoクラスで次のことを試してください @Transactional(propagation= Propagation.Mandatory、rollbackFor= {RuntimeException.class、DaoException.class})

DaoImplクラスから@Transactionalアノテーションを削除してみてください。トランザクションの境界(DaoImpl)を超えたときに、トランザクションがコミットされている可能性があります。私はこの設定でさまざまな成功を収めてきました。「内部」トランザクションに対して、いくつかの異なるトランザクションアプローチを試すことができます。

他にできることは、Springトランザクションログをオンにすることです。そのカテゴリはorg.springframework.transactionか何かだと思います。そうすれば、トランザクションをロールバックしてコミットするためにw.r.tが何をしているのかを正確に確認できます...

デフォルトでAUTOCOMMITモードになっているJDBCドライバーの1つがありませんか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top