@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的方法还有什么好方案代替呢?
慕勒0069038
相关分类