si quelqu’un peut expliquer ce que fait cette annotation et quand exactement on l’utilise:
@Transactional(propagation=Propagation.REQUIRED)
Merci
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 telle étendue de transaction logique peut déterminer le statut de restauration uniquement individuellement, une étendue de transaction externe étant logiquement indépendante de la scope de la transaction interne. Bien sûr, en cas de comportement PROPAGATION_REQUIRED standard, toutes ces scopes seront mappées à la même transaction physique. Par conséquent, un ensemble de marqueurs de restauration uniquement dans la scope de la transaction interne affecte les chances de la transaction externe de procéder à une validation (comme on peut s’y attendre).
http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html
Si vous avez besoin d’une explication des profanes à propos de l’utilisation au-delà de celle fournie dans 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 lancer une transaction sur la firebase database avant de l’exécuter. Si l’appelant de cette méthode a déjà démarré une transaction, cette méthode utilisera la même transaction physique sur la connexion de firebase database actuelle.
Cette annotation @Transactional
fournit un moyen de dire votre code lorsqu’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 pour ne pas avoir de données incomplètes dans votre firebase database ou pour nettoyer quelque chose en cas d’exception.
La gestion des transactions est un sujet assez compliqué, alors j’espère que cette réponse simplifiée est utile
Dans les applications Spring, si vous activez le support de transaction basé sur les annotations à l’aide de
et annotez n’importe quelle classe / méthode avec @Transactional (propagation = Propagation.REQUIRED), le framework Spring lance une transaction et exécute la méthode. 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
Le comportement Spring REQUIRED
signifie que la same transaction
sera utilisée s’il existe une transaction déjà ouverte dans le contexte d’exécution de la méthode bean en cours. S’il n’y a pas de transaction existante, le conteneur Spring en crée une nouvelle . Si plusieurs méthodes configurées en tant que comportement REQUIRED
sont appelées de manière nestede, des transactions logiques distinctes leur seront atsortingbuées, mais elles partageront toutes la même transaction physique . En bref, cela signifie que si une méthode interne provoque l’annulation d’une transaction, la méthode externe échouera à la validation et annulera également la transaction.
Pour comprendre les différents parameters et comportements transactionnels adoptés pour la gestion des transactions, tels que REQUIRED
, ISOLATION
etc., vous devez comprendre les principes de base de la gestion des transactions.
Lisez la gestion des transactions pour plus d’informations.