3

単体テストを実行した後、データがデータベースから削除されません。

AOP 構成またはスプリングのいずれかに問題があります。クラス AbstractTransactionalDataSourceSpringContextTests を拡張する単体テストを作成しました。AOP 構成については、テストするメソッドのポイントカットを作成しました。ポイントカットに次のアドバイスを与えました。

<tx:advice id="newTxAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="*" propagation="REQUIRES_NEW" />
    </tx:attributes>
</tx:advice>

データが削除されない理由を教えてください。ありがとう。

4

1 に答える 1

0
  • hereで説明されているように、伝播属性を持つトランザクションはREQUIRES_NEW、他のより広い範囲のトランザクションとは関係ありません。
  • AbstractTransactionalDataSourceSpringContextTestsとして、ものを削除AbstractTransactionalSpringContextTestsしませんが、実際にはテスト全体のトランザクションをロールバックします。

したがって、あなたの場合、トランザクションをテストするときに transactionManager が新しいトランザクションをコミットしている可能性が最も高いため、外側の tx が (によって AbstractTransactionalDataSourceSpringContextTests) ロールバックされると、手遅れです: データは既にコミットされています。

必要なことを行うには、デフォルトのREQUIRED伝播を使用してください。REQUIRES_NEW例外処理の問題を伴う特定のユースケースがない限り、一般的には使用しないことをお勧めします。

于 2013-03-18T11:17:56.857 に答える