// @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); } }
以上为代码,如果循环插入十条数据,在循环到第三次的时候报错,如何配置才能只回滚第三次的数据库操作,而不回滚前两次的数据库操作?
试了好多次,要么事务完全没回滚,要么就把前三次的全都回滚了
新手小白求解
批量操作连接池需要设备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
怎么解决的?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。