Printemps @Transactional annotation lors de l'utilisation de try catch block
Si nous attraper l'exception dans la méthode annotée avec les @Transactional
annotation, il va revenir si une exception se produit?
@Transactional(readOnly = false, propagation = Propagation.REQUIRED, rollbackFor=Throwable.class)
public void yearEndProcess() {
try {
//try block
} catch (Throwable throwable) {
//catch block
}
}
essayez-la dans votre application reposant, je suppose que vous comprenez ce que ne
Pouvez-vous nous montrer votre extrait de code?
Où est contenu yearEndProcess méthode? La classe qui contient yearEndProcess est un Service,d'un Composant ou d'autres adn, enfin, de mettre en œuvre certaines interfaces?
l'appel de cette méthode de contrôleur. Et je veux juste savoir que si je rollback transaction par programme, comme mentionné par ker p pag, alors que la société de travail de mise à jour?
@Transactional
faire.Pouvez-vous nous montrer votre extrait de code?
Où est contenu yearEndProcess méthode? La classe qui contient yearEndProcess est un Service,d'un Composant ou d'autres adn, enfin, de mettre en œuvre certaines interfaces?
l'appel de cette méthode de contrôleur. Et je veux juste savoir que si je rollback transaction par programme, comme mentionné par ker p pag, alors que la société de travail de mise à jour?
OriginalL'auteur Kedar Parikh | 2014-09-09
Vous devez vous connecter pour publier un commentaire.
par exemple
Si il y a une exception dans la méthode
doStuff
la transaction n'est pas annulée.To rollback the exception programmatically
, nous pouvons faire quelque chose comme ci-dessous.approche déclarative
programmatique de restauration
vous avez besoin de l'appeler à partir d'
TransactionAspectSupport
.Je ne comprends pas pourquoi nous avons besoin de
@Transactional(rollbackFor={MyException1.class, MyException2.class, ....})
? La valeur par défautrollbackFor
estThrowable
, il devrait déjà couvert?OriginalL'auteur Ankur Singhal
vous voulez lire cette
Intégré de gestion des transactions. Vous pouvez envelopper votre ORM code déclaratif, programmation orientée aspects (AOP), le style de la méthode de l'intercepteur soit via @Transactional annotation ou explicitement à la configuration de la transaction AOP conseils dans un fichier de configuration XML. Dans les deux cas, la sémantique de transaction et de la gestion des exceptions (restauration, et ainsi de suite) sont pris en charge pour vous. Comme discuté ci-dessous, en cas de Ressources et de gestion des transactions, vous pouvez également échanger des différents responsables de la transaction, sans affecter votre ORM code. Par exemple, vous pouvez permuter entre les transactions locales et JTA, avec le même plein de services (tels que déclarative des transactions) disponibles dans les deux scénarios. En outre, JDBC code peut intégrer pleinement un point de vue transactionnel avec le code que vous utilisez pour faire de l'ORM. C'est utile pour les données d'accès qui n'est pas adapté pour l'ORM, tels que le traitement par lot et BLOB streaming, qui a toujours besoin de partager des transactions courantes avec l'ORM opérations.
OriginalL'auteur Ker p pag
De printemps références de la documentation
Printemps vous recommande seulement d'annoter les classes concrètes (et les méthodes des classes de béton)
avec le @Transactional annotation, par opposition à l'annotation des interfaces. Vous pouvez certainement
placez le @Transactional annotation sur une interface (ou une méthode d'interface), mais cela fonctionne
seulement comme vous vous attendez à si vous utilisez l'interface en fonction des procurations. Le fait que Java
les annotations ne sont pas héritées d'interfaces signifie que si vous utilisez la classe de base des procurations
( proxy-cible class="true") ou le tissage des aspects ( mode="aspectj"), puis
les paramètres de la transaction ne sont pas reconnus par le proxy et le tissage de l'infrastructure et de la
l'objet ne sera pas enveloppé dans une transactionnel proxy, ce qui serait décidément mauvais.
En mode proxy (qui est la valeur par défaut), seulement à l'extérieur des appels de méthode à venir à travers le proxy sont
intercepté. Cela signifie que l'auto-invocation, en effet, une méthode de l'objet cible de l'appel
une autre méthode de l'objet cible, ne conduira pas à une transaction au moment de l'exécution, même si la
méthode invoquée est marqué avec @Transactionnelle.
Puis avec @Transaction le comportement par défaut, c'est que tout RuntimeException déclencheurs de la restauration, et tout vérifié Exception ne fait pas. Ensuite, votre transaction roll back pour tous les RuntimeException un pour les bagages Exception Throwable
OriginalL'auteur Skizzo
Vous l'avez déjà mentionné attribute:rollbackFor=Throwable.class dans votre @Transactional annotation.
Donc, pour tout type d'exception transaction sera annulée.
OriginalL'auteur G.S.Tomar