开发者社区> 问答> 正文

在循环中调用配置了事务的方法,如何才能部分回滚??报错


//	@Transactional
	@Override
	public void outter(int num,int step) {
		for (int i = num+1; i <= num+step; i++) {
			this.inner(i);
		}
	}
	
	@Transactional(propagation=Propagation.REQUIRED)
	@Override
	public void inner(int index) {
		jdbcTemplate.update("INSERT INTO `t_unit_account` (`id`, `available`, `open_fund`, `locked`) VALUES (?, ?, ?, ?)", index, index, index, index);
		if(index==3){
			int ii = 1/0;
			System.out.println(ii);
		}
	}



以上为代码,如果循环插入十条数据,在循环到第三次的时候报错,如何配置才能只回滚第三次的数据库操作,而不回滚前两次的数据库操作?

试了好多次,要么事务完全没回滚,要么就把前三次的全都回滚了

新手小白求解






展开
收起
爱吃鱼的程序员 2020-06-10 14:51:57 1387 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    批量操作连接池需要设备checkpoint才能回滚到指定的位置.
    每次循环开始前保存事务point,如果出错则回滚到此point
    inner新开一个事务

    --ORACLE

    <imgsrc="http://static.oschina.net/uploads/space/2016/0119/232010_Jgb4_97321.png"alt="">

    --mysql

    http://dev.mysql.com/doc/refman/5.5/en/savepoint.html

    怎么解决的?


    2020-06-10 14:52:12
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载