আমার @ লেনদেন পদ্ধতিতে লেনদেন করার বিষয়ে আমার সমস্যা হচ্ছে:
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()?
কিছুর চেক করার কোনও উপায় আছে - এর মতো আমি পদ্ধতিটি থেকে পদক্ষেপ নিতে পারি এবং কারণটি খুঁজে পেতে পারি।