如何在 spring aop 中回滚?

how to do rollback in 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 时正在生成异常,但所有已执行的操作都未完成回滚。

试试这个解决方案

 @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();
}