kxys422834 2013-04-07 23:43
浏览 278
已采纳

hibernate 事务

[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放在不同的事务中,发现成功执行!!!
问题是我想,如果其中一个方法失败的话,都用事务回滚掉!请问有什么办法呢?

  • 写回答

1条回答 默认 最新

  • jinnianshilongnian 2013-04-08 07:40
    关注

    1、你可以在super.save(ar);之后输出下 其主键值 看看有没有
    2、你的主键生成策略是?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多
  • ¥15 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件
  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败