我的方法原子有问题,我使用注释@transaction of Spring, 在我的方法测试中,我使用methodeDOA(produitDao.createlist)在数据库Mongodb中使用spring数据创建à集合,并使用anthor methode produitDao.testRequired()来激发一个exeption。
==>所有这些测试我的回滚是否正常工作,但我有这个例子:
org.springframework.transaction.TransactionSystemException:无法提交JPA事务;嵌套异常是javax.persistence.RollbackException:标记为rollbackOnly的事务 在org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:526)〜[spring-orm-4.2.4.RELEASE.jar:4.2.4.RELEASE] 在org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:761)〜[spring-tx-4.2.4.RELEASE.jar:4.2.4.RELEASE] 在org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:730)〜[spring-tx-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:485)〜[spring-tx-4.2.4.RELEASE.jar:4.2.4.RELEASE] 在org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:291)〜[spring-tx-4.2.4.RELEASE.jar:4.2.4.RELEASE] 在org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)〜[spring-tx-4.2.4.RELEASE.jar:4.2.4.RELEASE] 在org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)〜[spring-aop-4.2.4.RELEASE.jar:4.2.4.RELEASE]
这是我的主要方法:
@Transactional(rollbackFor = RuntimeException.class ,propagation=Propagation.REQUIRED)
public void createDoaEnsembleProduitEnMongoDB(
HashMap<Integer, List<?>> mapProduit) {
produitDao.createlist((List<ProduitDocument>) mapProduit.get(ProduitMongoEnum.PRODUIT_MONGO.getIndex()));
try{
produitDao.testRequired();
} catch(RuntimeException e){
// handle exception
}
}
我的工具方法doa:
@Override
@Transactional(rollbackFor = RuntimeException.class ,propagation=Propagation.REQUIRED)
public void createlist( List<T> object ) {
mongoTemplate.insertAll( object );
}
@Transactional(rollbackFor = RuntimeException.class ,propagation=Propagation.REQUIRED)
public void testRequired() {
throw new RuntimeException("Rollback this transaction!");
}
我的目标是,如果出现错误,我的create方法必须进行回滚,
感谢您的帮助