@Transactionnel (propagation=Propagation.REQUIS)
si quelqu'un peut expliquer ce que fait cette annotation et quand exactement nous l'utilisons:
@Transactional(propagation=Propagation.REQUIRED)
Merci
5 réponses
lorsque le paramètre de propagation est PROPAGATION_REQUIRED, un champ de transaction logique est créé pour chaque méthode sur laquelle le paramètre est appliqué. Chacun de ces champs de transaction logique peut déterminer le statut de retrait seulement individuellement, un champ de transaction externe étant logiquement indépendant du champ de transaction interne. Bien sûr, en cas de propagation standard_required behavior, tous ces champs seront mappés à la même transaction physique. Donc, un marqueur de retour-seulement mis en la portée de la transaction interne affecte la chance de la transaction externe de s'engager (comme vous vous y attendriez).
http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html
si vous avez besoin d'une explication de laymans de l'utilisation au-delà de celle prévue dans le 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à commencé une Transaction, alors cette méthode utilisera le même mouvement physique dans la base de données courante connexion.
cette annotation @Transactional
fournit un moyen de dire à votre code quand il 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 doivent nettoyer quelque chose si une exception se produit.
la gestion des transactions est un sujet assez compliqué donc, espérons que cette réponse simplifiée est utile
dans les applications de printemps, si vous activez le support de transaction basé sur l'annotation en utilisant <tx:annotation-driven/>
et annotez n'importe quelle classe/méthode avec @Transactional(propagation=Propagation.Requis) puis Spring framework démarrera une transaction et exécute la méthode et engage la transaction. Si une exception RuntimeException se produit, la transaction sera annulée.
en fait propagation = Propagation.Requis est le niveau de propagation par défaut, vous n'est pas explicitement mentionné.
pour plus d'informations: http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html#transaction-declarative-annotations
Printemps REQUIRED
comportement signifie que le same transaction
sera utilisé si il y a un déjà ouvert transaction dans le courant de la méthode d'haricot contexte d'exécution. Si il y a aucune transaction le Printemps conteneur créer un nouveau . Si plusieurs méthodes configuré comme REQUIRED
comportement sont appelés imbriqués ils seront affectés distinctes les transactions logiques mais ils seront tous partagent la même transaction physique . En bref cela signifie que si une méthode interne provoque une transaction à l'arrière-plan, la méthode externe manquera de commettre et sera également l'arrière-plan de la transaction
pour comprendre les divers paramètres et comportements transactionnels adoptés pour la gestion des transactions, tels que REQUIRED
, ISOLATION
, etc. vous devez comprendre les bases de la gestion des transactions elle-même.
Lire Trasaction de gestion pour plus d'explication.