2

Javaメソッドで@Transactionalアノテーションを使用してSpring宣言型データベーストランザクション管理を使用しています。

あるケースでは、メソッドが戻る前に、現在のトランザクション(現在実行中のメソッドをラップするトランザクション)を明示的にコミットしたいと思います。

これはどのように行うことができますか?

Springコンテキストから現在のHibernateTransactionManagerを自動配線し、それを使用してコミットしようとしましたが、トランザクションがコミットされません。

私が試したコードは次のとおりです。

transactionManager.commit(transactionManager
  .getTransaction(new DefaultTransactionDefinition()));
4

2 に答える 2

1

私は試していませんが、私が考えることができるいくつかのトリックでこれを行うことができるかもしれません

TransactionAspectSupport.currentTransactionStatus() を使用して TransactionStatus を取得します Bean にトランザクション マネージャーを挿入します (休止状態を使用していると仮定します) トランザクション マネージャーで doCommit(DefaultTransactionStatus status) を呼び出してみてください。

春のドキュメントによると、これが機能するかどうかわからないので、これを試してください

取引

可能であれば、ロールバックに宣言型アプローチを使用することを強くお勧めします。絶対に必要な場合は、プログラムによるロールバックを利用できますが、その使用法は、クリーンな POJO ベースのアーキテクチャを実現することとは対照的です。

私はテストしていませんが、setRollbackOnly を TransactionStatus に設定すると、それも機能する可能性があります。

于 2012-07-13T15:20:58.767 に答える