0

私のメソッド内では、が原因で@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)発生することがあります。この例外をキャッチし、別のデータベースクエリで状況を処理します。ただし、例外により、setRollbackOnlyが自動的に設定され、この時点でトランザクションをコミットできなくなったため、このクエリは実行されません。org.eclipse.persistence.exceptions.DatabaseExceptionSQLException

Java SEでは、明示的に行います

manager.getTransaction().rollback();
manager.getTransaction().begin();

しかし、アプリケーションサーバー内では、これはもちろん機能しません。

この状況でデータベースの変更をコミットさせることはできますか?

4

2 に答える 2

1

esej のコメントで与えられたヒントは、「REQUIRES_NEW で注釈が付けられた別の Bean でメソッドを呼び出す」という解決策でした。

ありがとう

于 2012-08-30T14:01:26.273 に答える
0

前のトランザクションがコミットもロールバックもされていないときに、新しいグローバル トランザクションを開始しようとすると、「Routine was invoked etc..」エラーが発生します。

これを修正するには、次の手順を実行する必要があります。

最初の例外をキャッチするときは、コンテナーに任せて、トランザクションに「ロールバック」のフラグを立てないでください。トランザクションに手動でロールバックのフラグを立てる必要があります。

于 2012-08-30T14:10:52.770 に答える