2

春/休止状態を使用しています。サービスレイヤーとDAOレイヤーがあります。トランザクションはサービス層に配置されます。FirstServiceImpl クラスがあります。FirstServiceImpl クラスのメソッドの 1 つには、500 行のコードがあります。私がしたことは、500行のコードすべてを取り、別のクラスに配置することでした(1つのインターフェイスと実装クラスを作成しました。FirstServiceImplクラスでは、新しく作成したインターフェイスを自動配線して、その単一のメソッドにアクセスしました)。FirstServiceImpl クラスに @Transactional を配置しました。

私の質問は、「新しく作成されたクラス ロジックはトランザクション コンテキストでも実行されますか」ということです。

ありがとう!

4

1 に答える 1

0

よくわかりませんが、トランザクションの伝播を使用すると思います。しかし、それが機能するかどうかをテストする確実な方法をお伝えできます。

単一のトランザクションでコードを使用して、次のデータベース操作を実行します。

1 つの行を db に挿入/更新し、同じトランザクションで 2 番目の行を挿入/更新しようとします。

2 行目を挿入する際に、意図的に例外を発生させます。データベースに「最初のエントリ」が表示される場合は、トランザクションがロールバックされていないことを意味します。そして、それは機能しません。

データベースに最初の行のエントリがない場合は、トランザクションがロールバックされたことを意味します。ここでUnexpectedRollbackExceptionが発生する場合があります。

テストする前に、注釈が@Transactional(propagation=Propagation.REQUIRED)

于 2012-06-08T09:49:52.553 に答える