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、你的主键生成策略是?

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

报告相同问题?

悬赏问题

  • ¥15 arduino控制ps2手柄一直报错
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥85 maple软件,solve求反函数,出现rootof怎么办?
  • ¥15 求chat4.0解答一道线性规划题,用lingo编程运行,第一问要求写出数学模型和lingo语言编程模型,第二问第三问解答就行,我的ddl要到了谁来求了
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题