论坛首页 Java企业应用论坛

嵌套事务

浏览 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,求教更好的解决方法
新年快乐!
   发表时间:2008-02-04  
在类的内部直接调用自己的方法,是不经过SpringAOP事务代理的,
所以,所有这些操作都在methodA的事务内,不存在什么嵌套事务问题
前n-1次操作也不应该提交,你看看是不是别的问题造成
0 请登录后投票
   发表时间:2008-02-04  
methodA、methodB是两个service中的方法,serviceB注入到serviceA
0 请登录后投票
   发表时间:2008-02-05  
Spring 提供了两种高级的切入点,
ComposablePointCut 组合切入点。
ControlFlowPointCut 流程切入点。

ControlFlowPointCut 就是 为特定类下的指定方法(或方法集), 通知该方法内部调用的所有方法。

可以去试试。
0 请登录后投票
   发表时间:2008-02-14  
两个事务的传输级别都设置成 PROPAGATION_REQUIRED即可。 跟循环多少次没有关系。 http://starrystarry-night.iteye.com/admin/blogs/160104
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics