hibernate 的多事务回滚

starc 2009-07-21 02:55:15
如题

有下面两个表构成一个商品对象,它们一对多的关系(一个商品表有N个属性)
商品表(id,name)属性表(id,key,value)

为每个表都写了一个DAO 数据库事务的打开和提交都有在DAO内完成,
建立一个新的商品,正常情况下先在商品表里新建一条记录(事务提交了),再在属性表里面添加N条记录指向商品表(事务提交了),如果在建立属性时发生了错误,属性的事务回滚,怎么让商品表的事务一起回滚呢
...全文
406 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 starc 的回复:]
很强,书上学不到的东西
[/Quote]
楼主好用了别忘了结帖啊
老紫竹 2009-07-21
  • 打赏
  • 举报
回复
在一个事务内,在提交以前,所有的操作都会回滚。
所以你要保证的就是,你的操作在一个事务内完成,全部成功或者全部不成功
starc 2009-07-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lwb314 的回复:]
你都commit完了不就是执行完了嘛,还怎么rollback,建议你不要每个数据库对象都写一个DAO,本身Hibernate就是支持多态的,你随便找个DAO改造一下,把输入的数据库对象类型改成Object类型,这样你传入任何的数据库对象都可以,只要hibernate的配置文件上有就可以了,
之后再重写个参数类型是ArrayList的save方法
Java codepublicboolean save(ArrayList list) {
Session session= HibernateSessionFactory.getSession();try {
Transaction tx= session.beginTransaction();for (int i=0; i< list.size(); i++) {//list里add()多个你要新增的数据库对象,这样多个对象1次commit操作,有一个对象出错,之前的操作都会回滚 session.save(list.get(i));
}
tx.commit();returntrue;
}catch (Exception e) {
tx.rollback();// TODO: handle exception e.printStackTrace();returnfalse;
}finally {
session.close();
}
}
[/Quote]
很强,书上学不到的东西
  • 打赏
  • 举报
回复
你都commit完了不就是执行完了嘛,还怎么rollback,建议你不要每个数据库对象都写一个DAO,本身Hibernate就是支持多态的,你随便找个DAO改造一下,把输入的数据库对象类型改成Object类型,这样你传入任何的数据库对象都可以,只要hibernate的配置文件上有就可以了,
之后再重写个参数类型是ArrayList的save方法

public boolean save(ArrayList list) {
Session session = HibernateSessionFactory.getSession();
try {
Transaction tx = session.beginTransaction();
for (int i = 0; i < list.size(); i++) {
//list里add()多个你要新增的数据库对象,这样多个对象1次commit操作,有一个对象出错,之前的操作都会回滚
session.save(list.get(i));
}
tx.commit();
return true;
} catch (Exception e) {
tx.rollback();
// TODO: handle exception
e.printStackTrace();
return false;
} finally {
session.close();
}
}

67,513

社区成员

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

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