日期:2014-05-20 浏览次数:20806 次
int i = 0; boolean flag = true; private void mtd(Object a){ service.save(a); if(flag){ mtd(b); flag = false; } if(++i=2){ throw new RuntimeExcetion("exception") } }
public void myMethodA(){ myMethodC(); myMethodB(); } 首先我们给B方法配置好我们的NESTED属性,其他方法默认。如果B方法执行失败他会回滚,但是C方法不会受他的影响,事务会正常提交。但是如果C方法执行失败,不论B方法执行是否成功,事务都不会提交。(注意B方法在另外一个类中)
------解决方案--------------------
第一次不会回滚,因为嵌套的事务理论上实现了隔离机制,即子事务的回滚不会影响包裹事务的提交。用PROPAGATION_REQUIRED就是回滚。