永続化ソリューションとして Hibernate を使用して、Spring MVC で新しいアプリケーションを構築しています。データ層にアプローチするには、次の 2 つのソリューションがあります。
1) 場合によっては、コントローラーが DAO レイヤーを直接呼び出します。これは、ビジネス チェックを実行する必要がないためです。そのため、そのような場合にはサービス層をバイパスしています。このためにサービス層を実装すると、メソッドを DAO 層に委譲するだけになります。
したがって、次のことを行っています: Controller -> DAO
2) その他のケースでは、いくつかのビジネス チェックが必要です。このために、従来の方法を使用します:
Controller -> Service -> DAO
Spring では、トランザクションを区切る必要があるため、すべての DAO メソッドに @Transaction アノテーションを付けます。これは、Controller -> DAO の方法で問題なく動作します。ただし、Controller -> Service -> DAO の方法を実行している場合は、サービス メソッドに @Transaction アノテーションを付ける必要もあります。
これは、場合によってはトランザクションがネストされていることを意味します。これは良いアプローチですか?すべての DAO メソッドで新しいトランザクション (REQUIRES_NEW) を作成する必要がありますか、それとも既存のトランザクション (REQUIRED) が存在する場合はそれを使用する必要がありますか?
誰かがこれについて私に教えてもらえますか?