si quelqu'un peut expliquer ce que fait cette annotation et quand exactement nous l'utilisons:
@Transactional(propagation=Propagation.REQUIRED)
Merci
si quelqu'un peut expliquer ce que fait cette annotation et quand exactement nous l'utilisons:
@Transactional(propagation=Propagation.REQUIRED)
Merci
Réponses:
Lorsque le paramètre de propagation est PROPAGATION_REQUIRED, une étendue de transaction logique est créée pour chaque méthode sur laquelle le paramètre est appliqué. Chaque étendue de transaction logique de ce type peut déterminer individuellement l'état de restauration uniquement, une étendue de transaction externe étant logiquement indépendante de la portée de transaction interne. Bien entendu, en cas de comportement PROPAGATION_REQUIRED standard, toutes ces étendues seront mappées sur la même transaction physique. Ainsi, un marqueur d'annulation uniquement défini dans la portée de la transaction interne affecte les chances de validation de la transaction externe (comme vous vous y attendez).
http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html
Si vous avez besoin d'une explication profane de l'utilisation au-delà de celle fournie dans les Spring Docs
Considérez ce code ...
class Service {
@Transactional(propagation=Propagation.REQUIRED)
public void doSomething() {
// access a database using a DAO
}
}
Lorsque doSomething () est appelé, il sait qu'il doit démarrer une transaction sur la base de données avant de l'exécuter. Si l'appelant de cette méthode a déjà démarré une transaction, cette méthode utilisera cette même transaction physique sur la connexion à la base de données actuelle.
Cette @Transactional
annotation fournit un moyen de dire à votre code lorsqu'il s'exécute qu'il doit avoir une transaction. Il ne fonctionnera pas sans un, donc vous pouvez faire cette hypothèse dans votre code que vous ne serez pas laissé avec des données incomplètes dans votre base de données, ou devrez nettoyer quelque chose si une exception se produit.
La gestion des transactions est un sujet assez compliqué, donc j'espère que cette réponse simplifiée sera utile
@Transactional
à votre couche de service, il n'est pas nécessaire d'ajouter également @Transactional
aux méthodes DAO appelées dans cette transaction.
doSomething()
invoque une autre méthode imbriquée sans @transactional, cette même transaction s'appliquera-t-elle également à cette méthode appelante?
Dans les applications Spring, si vous activez la prise en charge des transactions basées sur les annotations en utilisant <tx:annotation-driven/>
et annotez n'importe quelle classe / méthode avec @Transactional (propagation = Propagation.REQUIRED), Spring Framework démarrera une transaction et exécutera la méthode et valide la transaction. Si une exception RuntimeException s'est produite, la transaction sera annulée.
En fait propagation = Propagation.REQUIRED est le niveau de propagation par défaut, vous n'avez pas besoin de le mentionner explicitement.
Pour plus d'informations: http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html#transaction-declarative-annotations
Pour comprendre les différents paramètres et comportements transactionnels adoptés pour la gestion des transactions, tels que REQUIRED
, ISOLATION
etc., vous devrez comprendre les bases de la gestion des transactions elle-même.
Lisez la gestion de la traction pour en savoir plus.