Hibernate 的事务问题?只要问题解决,马上给分!

lemurzjb 2005-05-26 01:53:46
try {
tx = session.beginTransaction();
session.save(obj);
session.update(archive);
tx.commit();
v ++;
} catch (HibernateException e) {
rollback(tx);
log.error("Error: " + e.getMessage());
log.error("Can't load message " + archive.toString());
}
这部分代码是在一个for 循环里面的。

问题是这样的,第一个obj 在 session.save(obj)时就报错,这是对的,因为有意把obj设计成错误的。但是第二个obj是正确的,应该可以成功插入的,在session.save(obj)处没有问题。但是在tx.commit()时抛了异常,异常跟上个错误是一样的。
如果还有跟多正确的obj在后面执行,都会抛同样的异常。

也就是说只要有一个出错了,那么后面的都会出同样的问题,即使他们不应该出错。

不知道我说得够不够清楚。

谢谢捧场,问题解决马上给分,参与者也有
...全文
80 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lemurzjb 2005-05-26
  • 打赏
  • 举报
回复
解决了,谢谢各位,还学到不少
onlyxu 2005-05-26
  • 打赏
  • 举报
回复
操作第一个循环时出错了,hibernate可能会将session关闭?所以至后面操作无法继续
qingzhuang 2005-05-26
  • 打赏
  • 举报
回复
miaoliujun(傲龙) 回答觉的很有道理,楼主说:也就是说只要有一个出错了,那么后面的都会出同样的问题,即使他们不应该出错。 这个应该在java程序的都是这个情况的,只要前面的发生cacth,后面的也会发生
miaoliujun 2005-05-26
  • 打赏
  • 举报
回复
http://spaces.msn.com/members/jimmiao/Blog/cns!1pz20pn06DgckTGjakCyVZJQ!139.entry
miaoliujun 2005-05-26
  • 打赏
  • 举报
回复
这个要从对象的属性说起,如果这个对象处于持久状态,那么只要commit的时候,就会和数据库进行同步。

在你这里,每个obj都是持久状态了,所以其实越向后,你的持久对象越多,每次都是要把你这个提交的。

也就是说,执行完了,就应该把状态转换为游离态。
主动
在tx.commit后加session.close();

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧