在这种情况下如何进行回滚
我有一个列表,我必须插入整个
这是我的服务
@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正在生成但所有已执行的操作都没有完成回滚。
答案 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();
}