내 @Transactional 메서드 내에서 트랜잭션을 커밋하는 데 문제가 있습니다.
methodA() {
methodB()
}
@Transactional
methodB() {
...
em.persist();
...
em.flush();
log("OK");
}
methodA ()에서 methodB ()를 호출하면 메서드가 성공적으로 전달되고 로그에 "OK"가 표시됩니다. 하지만 나는
Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Transaction marked as rollbackOnly org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Transaction marked as 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()...
- methodB의 컨텍스트는 예외에서 완전히 누락되어 있습니다.
- methodB () 내의 무언가가 트랜잭션을 롤백으로 만 표시 했습니까? 어떻게 알 수 있습니까? 예를 들어 다음과 같은 것을 확인하는 방법이 있습니까
getCurrentTransaction().isRollbackOnly()?
-이와 같이 방법을 단계별로 수행하고 원인을 찾을 수 있습니다.