Je travaille sur un programme qui utilise Spring et obtient les transactions Hibernate de manière transparente en utilisant un TransactionInterceptor. Cela rend très pratique de dire "quand cette méthode est invoquée à partir d'une autre classe, enveloppez-la dans une transaction si elle n'en est pas déjà une."Obtention d'une transaction Hibernate dans une classe Spring
Cependant, j'ai une classe qui doit tenter une écriture et doit savoir immédiatement si elle a réussi ou non. Bien que je veuille deux méthodes de toute façon, j'espérais qu'il y avait un moyen de les garder dans la même classe sans avoir besoin de créer explicitement une transaction procédurale. En effet, je voudrais quelque chose comme ceci:
public void methodOne() {
//..do some stuff
try {
transactionalMethod();//won't do what I want
} catch(OptimisticLockingFailure e) {
//..recover
}
}
@Transactional
public void transactionalMethod() {
//...do some stuff to database
}
Malheureusement, si je comprends bien, cela ne fonctionnerait pas parce que je venais d'appeler directement transactionalMethod. Y at-il un moyen de demander à Spring d'appeler une méthode locale pour moi et de l'emballer dans une transaction si nécessaire, ou est-ce que ça doit être dans une autre classe que je fil à celle-ci?