J'ai un problème de persistance dans un service de printemps. Un Rest-Controller R reçoit une demande et appelle un service S de manière complexe via certaines couches de code. La méthode de service dans S déclare une transaction; ce devrait être la première fois qu'une transaction devrait être lancée. Mais le service se comporte comme si une transaction avait déjà été démarrée auparavant et que certains de mes objets de données feraient partie de la session (ce qu'ils ne doivent pas faire). Comment puis-je déterminer si une transaction est déjà active? J'ai essayé d'injecter EntityManager et/ou JpaTransactionManager; mais les deux semblent être d'aucune aide.
Comment puis-je vérifier si je suis dans une transaction ou non?
Je veux en être sûr avant de partir à la recherche de suspects potentiels.
Vous pouvez vérifier si la transaction est active en utilisant TransactionSynchronizationManager.isActualTransactionActive()
. Mais vous devriez l'appeler avant l'exécution d'une méthode de service.
Aussi, vous pouvez obtenir le statut de la transaction en cours en utilisant
TransactionStatus status = TransactionAspectSupport.currentTransactionStatus();
En outre, un bon point pour vous est de permettre la journalisation des transactions.
log4j.logger.org.hibernate.transaction=DEBUG,R
log4j.logger.org.springframework.transaction=DEBUG,R
Vous pouvez utiliser
org.springframework.transaction.support.TransactionSynchronizationManager#isActualTransactionActive