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

lemurzjb 2005-05-26 01:53:34
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在后面执行,都会抛同样的异常。

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

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

谢谢捧场,问题解决马上给分,参与者也有
...全文
170 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
h_yufa 2005-05-28
  • 打赏
  • 举报
回复
我还没有学习hibernate!!!
miaoliujun 2005-05-27
  • 打赏
  • 举报
回复
可以结帖了:)
zjjsgwm 2005-05-26
  • 打赏
  • 举报
回复
miaoliujun(傲龙)
解释的很明白...学习。。。
opencsdn 2005-05-26
  • 打赏
  • 举报
回复
楼主是测试用吗?
如果不是,结构要改一下,异常整体捕获和回滚~
onlyxu 2005-05-26
  • 打赏
  • 举报
回复
把你的错误代码和整段代码都贴出来,好让大家分析
qingzhuang 2005-05-26
  • 打赏
  • 举报
回复
再进!
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,515

社区成员

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

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