Je rencontre des problèmes pour valider une transaction dans ma méthode @Transactional :
methodA() {
methodB()
}
@Transactional
methodB() {
...
em.persist();
...
em.flush();
log("OK");
}
Lorsque j'appelle methodB() depuis methodA(), la méthode réussit et je peux voir "OK" dans mes logs. Mais ensuite, je reçois
Impossible de valider la transaction JPA ; l'exception imbriquée est javax.persistence.RollbackException : Transaction marquée comme rollbackOnly org.springframework.transaction.TransactionSystemException: Impossible de valider la transaction JPA ; l'exception imbriquée est javax.persistence.RollbackException: Transaction marquée comme rollbackOnly
at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:521)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:754)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723)
at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:393)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:120)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:622)
at methodA()...
- Le contexte de methodB est complètement absent dans l'exception - ce qui est normal je suppose ?
- Quelque chose à l'intérieur de methodB() a marqué la transaction comme étant en mode rollback uniquement ? Comment puis-je le découvrir ? Y a-t-il par exemple un moyen de vérifier quelque chose comme
getCurrentTransaction().isRollbackOnly()?
- de cette manière je pourrais parcourir la méthode et trouver la cause.