私はかなり古典issusを持っています。使用?アクセスレイジーコレクションDAO、LazyInitializationExceptionに魔女リードの外:
これは、これらのレイジーコレクションを使用するDAOの外で@Transactional
サービスのいくつかの方法を使用する清潔で妥当なソリューションですか?
ありがとうございました
私はかなり古典issusを持っています。使用?アクセスレイジーコレクションDAO、LazyInitializationExceptionに魔女リードの外:
これは、これらのレイジーコレクションを使用するDAOの外で@Transactional
サービスのいくつかの方法を使用する清潔で妥当なソリューションですか?
ありがとうございました
はいです。ビジネスを「知っている」ため、どのタスクが作業単位(トランザクション)でなければならないかを知っているのがサービスです。
Neuquino has the right answerが、それは非常に明確で理解しやすいではありませんので、私はそれを修正してくださいしようとするでしょう:
あなたは通常、あなたが@Transactional
とサービス層に注釈を付ける理由は、一つのサービスメソッドのための1つのトランザクションではないしたいですDAO層。 (Spring @Transactional
アノテーションの素晴らしい点は、基本的な実装とは独立しているため、通常、永続化レイヤーに固有のサービスレイヤーにコードがないことです。たとえば、休止状態への呼び出しなし(Session
またはJPA EntityManager
)。 DAOを単体テストするときには、@Transactional
アノテーションをテストメソッドに入れます(テストはDAOではなくサービスです)。
+1。サービスの代わりにトランザクションDAOは悪い習慣です。 – Bozho