首页 新闻 搜索 专区 学院

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

0
[待解决问题]

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

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

    @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;
    }
calm01的主页 calm01 | 初学一级 | 园豆:190
提问于:2018-07-04 13:48
< >
分享
所有回答(1)
0

Spring aop了解下

solvang | 园豆:202 (菜鸟二级) | 2018-07-17 09:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册