2017-07-25 5 views

Répondre

0

L'emplacement que vous utilisez @Transactional indique la portée de votre transaction. Lorsque vous l'utilisez dans la couche DAO, vous spécifiez que chaque opération DAO sera validée dans une transaction. Lorsque vous l'utilisez en service, vous spécifiez que chaque opération de service (business unit) est validée dans une transaction, ceci est recommandé car la méthode de service représente généralement une business unit qui doit être incluse dans la même transaction car toute défaillance doit être exécutée retour de toute l'unité d'affaires.

+0

Merci pour votre réponse. Mais j'utilise cette annotation pour Roll back. Je veux une compréhension claire de l'utilisation de cette annotation dans les couches Domain et Dao. Je voulais aussi connaître les avantages et les inconvénients de l'utilisation de l'annotation @Transactional –

1

Il est recommandé d'utiliser @Transactional dans la couche de service, car elle régit la logique nécessaire pour identifier la portée d'une base de données et/ou d'une transaction commerciale. La couche de persistance par conception ne connaît pas la portée d'une transaction.

Les DAO peuvent être créés @Transactional comme n'importe quel autre bean, mais c'est une pratique courante de l'utiliser dans la couche de service. Nous avons tendance à le faire parce que nous voulons séparation des préoccupations. La couche de persistance récupère/stocke les données de la base de données. Par exemple, si nous voulons transférer un montant d'un compte à un autre, nous avons besoin de deux opérations, un compte doit être débité et d'autres doivent être crédités. Ainsi, la portée de ces opérations n'est connue que par la couche de service et non par la couche de persistance.

La couche de persistance ne peut pas savoir dans quelle transaction elle se trouve, par exemple une méthode person.updateUsername(). Devrait-il courir dans sa propre transaction séparée toujours? il n'y a aucun moyen de savoir, cela dépend de la logique métier qui l'appelle.

Voici quelques fils vous devriez lire

Where does the @Transactional annotation belong?

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

0

@Transactional: Il y a deux concepts distincts à considérer, chacun avec son propre cycle de portée et de la vie: contexte de persistance, transaction de base de données On dirait que vous avez plus dans la base de données de traction:

@ Annotation transactionnelle elle-même définit la portée d'une base de données unique transacti sur. La transaction de base de données se produit dans le cadre d'un contexte de persistance.

Le contexte de persistance est JPA l'EntityManager, mis en œuvre en interne à l'aide d'une session Hibernate