मेरे पास मेरे @ ट्रांसेक्शनल विधि में लेनदेन करने के मुद्दे हैं:
methodA() {
methodB()
}
@Transactional
methodB() {
...
em.persist();
...
em.flush();
log("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()...
- मेथडब का संदर्भ पूरी तरह से अपवाद में गायब है - जो ठीक है मुझे लगता है?
- मेथडब के भीतर कुछ () केवल रोलबैक के रूप में लेनदेन को चिह्नित करता है? मैं इसे कैसे पता लगा सकता हूं? उदाहरण के लिए कुछ की जाँच करने का एक तरीका है
getCurrentTransaction().isRollbackOnly()?
- जैसे मैं इस विधि के माध्यम से कदम उठा सकता हूं और इसका कारण जान सकता हूं।