浏览 3727 次
锁定老帖子 主题:嵌套事务
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-02-04
//serviceA.java methodA(){ for(i<n){ methodB(); } //throw an exception here. } //serviceB.java methodB(){ List list = query("select from Subject where ..."); for(list){ otherBusiness(subject); delete(subject); } } 环境:框架SSH,methodA、methodB事务控制使用 <prop key="*">PROPAGATION_REQUIRED,-java.lang.Throwable</prop> 表象:在methodA中循环了n次methodB,执行到异常处,发现methodB被提交了n-1次,最后一次methodB被会滚 原因:对Subject的操作应该是在对该表的查询时query(sql)被强制提交了 求教:我目前的做法是将query(sql)操作提到methodA,求教更好的解决方法 新年快乐! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-02-04
在类的内部直接调用自己的方法,是不经过SpringAOP事务代理的,
所以,所有这些操作都在methodA的事务内,不存在什么嵌套事务问题 前n-1次操作也不应该提交,你看看是不是别的问题造成 |
|
返回顶楼 | |
发表时间:2008-02-04
methodA、methodB是两个service中的方法,serviceB注入到serviceA
|
|
返回顶楼 | |
发表时间:2008-02-05
Spring 提供了两种高级的切入点,
ComposablePointCut 组合切入点。 ControlFlowPointCut 流程切入点。 ControlFlowPointCut 就是 为特定类下的指定方法(或方法集), 通知该方法内部调用的所有方法。 可以去试试。 |
|
返回顶楼 | |
发表时间:2008-02-14
两个事务的传输级别都设置成 PROPAGATION_REQUIRED即可。
跟循环多少次没有关系。
http://starrystarry-night.iteye.com/admin/blogs/160104
|
|
返回顶楼 | |