无法提交JPA事务

时间:2017-02-22 19:41:12

标签: spring-data rollback

我的方法原子有问题,我使用注释@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方法必须进行回滚,

感谢您的帮助

0 个答案:

没有答案