spring事务,在循环中update出现异常回滚问题?

@Transactional(rollbackFor = Exception.class)
public int test4()  {
    int  r= 0;
    for (int i = 0; i<10; i++) {
        try {
            //查询管理账户
            SystemAccout systemAccout = gaodeMapper.getSysAccout(1);

            //更新普通账户
            Gaode gao = new Gaode();
            gao.setId(i);
            gao.setAddrName("testException-save-one " + i);
            gao.setPoint(systemAccout.getPoint());
            gao.setBal(systemAccout.getBal());
            r = gaodeMapper.updateUser(gao);
            if(r > 0) {
                //假设更新到第五条出现异常,只需回滚本次循环的所有update 或 save操作记录,继续执行不中断循环
                if(i == 5) {
                    throw new RuntimeException();
                }
                //更新管理账户
                SystemAccout sys = new SystemAccout();
                sys.setId(1);
                sys.setPoint(systemAccout.getPoint() - ThreadLocalRandom.current().nextInt(10, 100));
                gaodeMapper.updateSystemAccoutn(sys);

            }
        }catch (Exception e) {
            throw e;
        }
    }
    return r;
}

在一个有事务的方法中通过读取表记录集合,循环update或save字段值,每更新一个普通账户都要更新一次管理账户,所以要重新查询系统账户。

不知各位老师在项目中遇到这种情况怎么处理的?
这种通过读取到一个集合然后遍历update或save的方法还有什么好方案代替呢?


慕粉3557681
浏览 1097回答 1
1回答

慕勒0069038

update select结合语句了解一下?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java