2017-07-25 18 views

答えて

0

@Transactional annotationは、取引の範囲を指定します。

DAOレイヤーで使用する場合、各DAO操作がトランザクション内でコミットされるように指定しています。

各サービス操作(ビジネスユニット)がトランザクションでコミットされることをサービスで使用する場合は、通常はサービスメソッドがビジネスユニットを表しているため、同じトランザクションに含める必要がありますビジネスユニット全体をバックアップします。

+0

ありがとうございます。しかし、私はロールバックのためにこの注釈を使用しています。私はドメインとDaoの層でこの注釈の使用法を明確に理解したい。 @Transactionalアノテーションを使用するメリットとデメリットも知りたい –

1

@Transactionalは、データベースおよび/またはビジネストランザクションのスコープを識別するために必要なロジックを管理するため、サービスレイヤで使用することをお勧めします。パーシスタンス層は、トランザクションの範囲を意識することはありません。

DAOは他のBeanと同じように@Transactionalとすることができますが、サービス層で使用するのが一般的です。我々はの関心事を分離したいので、これを行う傾向があります。永続性レイヤーは、データベースから前後にデータを取得/格納するだけです。

たとえば、ある口座から別の口座に金額を振り替える場合は、2つの操作が必要です.1つの口座から引き落とし、他の口座に振り込む必要があります。したがって、これらの操作の範囲は、サービス層でのみ認識され、永続層では認識されません。

パーシスタンス層は、それがどのトランザクションに含まれているかを知ることができません。たとえば、メソッドperson.updateUsername()を取ります。それはそれ自身の別々のトランザクションで実行する必要がありますか?それを呼び出すビジネスロジックに依存しています。ここで

いくつかのスレッドが、あなたは

Where does the @Transactional annotation belong?

Where should "@Transactional" be place Service Layer or DAO

0

@Transactionalをお読みください:考慮するために2つの別々の概念がありますが、それ自身のスコープとライフサイクルを持つ各:永続コンテキスト、データベースのトランザクション データベースのトラクションには多くのものがあります:

@Transactionalアノテーション自体は、単一のデータベーストランザクションのスコープを定義しますに。データベーストランザクションは、永続コンテキストの範囲内で発生します。

永続コンテキストはJPA EntityManagerにあり、内部的にはHibernateセッションを使用して実装されています

関連する問題