29

JdbcTemplateを使用する場合、トランザクションを明示的に構成する必要がありますか?

私のコードレイアウトは次のようになります。

UserServiceに挿入されるUserDaoがあり、コントローラーがUserServiceのメソッドを呼び出します。

トランザクションに関してはできるだけシンプルにしたいので、トランザクションにまたがるのに複数のデータベース呼び出しは必要ありません。

デフォルトでは、構成ファイルで何かを行う必要がありますか、それとも@Transactionどこかで注釈を使用する必要がありますか?

ここで、コントローラーでuserServiceとaccountServiceを2回呼び出す必要があるとしましょう。どういうわけか、明示的にトランザクションでラップできますか?

userService.updateUser(user);
accountService.updateXXX(...);
4

2 に答える 2

35

はい、JdbcTemplateトランザクション管理に代わるものではありません。あなたはまだデータベーストランザクションの恩恵を受けているので、データベースuserService.updateUserトランザクションで動作しますが、失敗した場合、ロールバックしませaccountService.updateXXXuserService.updateUser

AOPを使用したくない場合は、代わりにTransactionTemplateを使用できます。SpringReferenceDocumentationのプログラムによるトランザクション管理参照してください。

私が以前に見たパターンの1つは、MVCコントローラークラスがビジネスサービスを呼び出し、操作をカプセル化することです。次に、ビジネスクラスのメソッドに注釈を付けることができます@Transactional

于 2012-09-28T14:14:16.250 に答える
16

コントローラがユーザーとアカウントでいくつかのことを行い、すべてを1つのトランザクション内で実行したい場合は、それらすべてを実行する1つのメソッドを備えたサービスが必要です。DAOごとに1つのサービスを作成するのは良い考えではありません。これは、DAOのラッパーが何も行われず、データベースがDAOの呼び出しごとに個別のトランザクションを作成する必要があるため、処理が遅くなるためです。必要以上に多くの作業が必要です。

サービスは、コントローラーまたはそれを呼び出している他の人に機能を提供する必要があります。特定のタイプのユーザーに役立つ特定の機能を提供するという考えでサービスを作成しようとしています。

于 2012-09-28T14:29:07.370 に答える