web-dev-qa-db-fra.com

@Transactional (propagation = Propagation.REQUIRED)

si quelqu'un peut expliquer ce que fait cette annotation et quand exactement nous l'utilisons:

@Transactional(propagation=Propagation.REQUIRED)

Merci

93
Adil

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é. Chacune de ces portées de transaction logique peut déterminer individuellement le statut d'annulation uniquement, une portée de transaction externe étant logiquement indépendante de la portée de transaction interne. Bien entendu, dans le cas du comportement standard PROPAGATION_REQUIRED, toutes ces étendues seront mappées sur la même transaction physique. Par conséquent, un ensemble de repères d'annulation uniquement dans l'étendue de la transaction interne affecte les chances de validation de la transaction externe (comme vous le pensiez).

enter image description here

http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html

61
Guido

Si vous avez besoin d’une explication profane de l’utilisation au-delà de celle fournie 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, cette méthode utilisera la même transaction physique sur la connexion à la base de données actuelle.

Cette annotation @Transactional permet de dire à votre code, lorsqu'il exécute, que doit avoir une transaction. Il ne fonctionnera pas sans, de sorte que vous pouvez supposer dans votre code que vous ne conserverez pas de données incomplètes dans votre base de données ou que vous devrez nettoyer quelque chose si une exception se produit.

La gestion des transactions est un sujet assez compliqué. J'espère que cette réponse simplifiée sera utile.

147
Brad

Dans les applications Spring, si vous activez la prise en charge des transactions par annotation avec <tx:annotation-driven/> et annotez toute classe/méthode avec @ Transactionnelle (propagation = Propagation.REQUIRED) alors le cadre Spring démarrera une transaction et exécutera la méthode et validera la transaction. Si une exception RuntimeException s'est produite, la transaction sera annulée.

En réalité, 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

14

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.

Lisez Gestion de la traction pour plus d’explications.

5
Bitmap