如何在春天回滚?

时间:2017-05-02 20:42:34

标签: spring hibernate spring-aop

在这种情况下如何进行回滚

我有一个列表,我必须插入整个

这是我的服务

@Transactional
@Override
public void saveOrUpdate(List<ETP> etps) {
    try {
        for (ETP etp : etps) {
            if(etp.getAffectation().getMessage()!="Pas bon" || etp.getAffectation().getMessage()!="Pas ok" || etp.getAffectation().getMessage() !="" ){
                etpDao.saveOrUpdate(etp);
            }
        }
    } catch (Exception e) {
        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
    }       
}

我希望如果此列表中只有一项不符合我必须取消交易的条件。

更新

这是我引发一次异常后的功能

    @Transactional(rollbackFor={Exception.class})
@Override
public void saveOrUpdate(List<ETP> etps) {
    for (ETP etp : etps) {
        if(etp.getAffectation().getMessage().equals("Bon")){
            etpDao.saveOrUpdate(etp);
        }
          else 
              throw new RuntimeException();   
        }
}

当条件为false时,exeception正在生成但所有已执行的操作都没有完成回滚。

1 个答案:

答案 0 :(得分:2)

尝试此解决方案

 @Transactional
 @Override
 public void saveOrUpdate(final List<ETP> etps){

    if (cheakETPStatus(etps))
    {
        for (final ETP etp : etps)  {
            etpDao.saveOrUpdate(etp);
        }
    }
}

private  boolean cheakETPStatus(final List<ETP> etps){
    int count=0;
    for (ETP etp : etps){ 
        if (etp.getAffectation().getMessage().equals("Bon"))
           count++;                 
    }
    return count==etps.size();
}