[code="java"]
public ActivityRemark addRemark(String userId, String activityId, int remark, String remarkContent){
ActivityRemark ar = new ActivityRemark();
ar.setUserId(userId);
ar.setActivityId(activityId);
ar.setRemark(remark);
ar.setRemarkContent(remarkContent);
[color=red]super.save(ar);[/color]
[color=red]updateJoinActivity(ar);[/color]
return ar;
}
public void updateJoinActivity(ActivityRemark ar){
String hql = "update com.huobao.web.entity.JoinActivity u set u.activityRemarkId=? where u.userId=? and u.activityId=?";
super.query(hql, ar.getId(),ar.getUserId(),ar.getActivityId()).executeUpdate();
}
[/code]
红色的部分:save是在A表中新增一条数据,updateJoinActivity是更新B中某一条数据的activityRemarkId字段,activityRemarkId字段是外键,其和A表进行关联,现在addRemark这个方法是做了事务的.
现在发生这样的错误:
[code="java"]cannot add or update a child row a foreign key constraint fails[/code]
分析原因,应该是updateJoinActivity更新的时候并没有找到A表中插入的数据主键,但是save的确是成功的,难道这个save插入的数据没有commit导致update时找不到主键造成的?
接下来我尝试把save和updateJoinActivity放在不同的事务中,发现成功执行!!!
问题是我想,如果其中一个方法失败的话,都用事务回滚掉!请问有什么办法呢?