Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 如何在春季aop中回滚?_Spring_Hibernate_Spring Aop - Fatal编程技术网

Spring 如何在春季aop中回滚?

Spring 如何在春季aop中回滚?,spring,hibernate,spring-aop,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()!="P

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

我有一张单子,我必须全部插入

这是我的服务

@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
@凌驾
公共作废保存或更新(列出ETP){
试一试{
用于(ETP ETP:etps){
如果(etp.getAffectation().getMessage()!=“Pas bon”| etp.getAffectation().getMessage()!=“Pas ok”| etp.getAffectation().getMessage()!=”){
etpDao.saveOrUpdate(etp);
}
}
}捕获(例外e){
TransactionSpectSupport.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();   
        }
}
@Transactional(rollboor={Exception.class})
@凌驾
公共作废保存或更新(列出ETP){
用于(ETP ETP:etps){
if(etp.getAffectation().getMessage().equals(“Bon”)){
etpDao.saveOrUpdate(etp);
}
其他的
抛出新的RuntimeException();
}
}
当条件为false时,正在生成exeception,但所有执行的操作都未完成回滚。

尝试此解决方案

 @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();
}
@Transactional
@凌驾
公共作废保存或更新(最终列表ETP){
if(cheakETPStatus(etps))
{
用于(最终ETP ETP:etps){
etpDao.saveOrUpdate(etp);
}
}
}
私有布尔cheakETPStatus(最终列表ETP){
整数计数=0;
对于(ETP ETP:ETP){
if(etp.getAffectation().getMessage().equals(“Bon”))
计数++;
}
返回计数==etps.size();
}

Hello Rodik,您所说的“此列表中只有一项不符合条件”是什么意思。你是说在if条件下会导致false的项吗?你是否尝试过
@Transactional(rollboor={Exception.class})
BTW:The comparing
getMessage()=“Pas bon”
不好。改为使用equals()。要回滚,只需抛出一个异常。@chalimartines感谢您的响应,我在列表上循环,如果消息等于某些链,我就插入。现在假设我的列表包含50个元素和49个在条件中输入的项目,以及最后一个项目no,我想取消所有49个插入。你明白我的意思吗?@PRATHAPS我试过了,但是除了生成器之外它不工作,但是异常之前的插入被很好地插入到数据库中