交易管理

时间:2010-04-14 17:52:12

标签: java hibernate spring orm

在我的代码中,我将一个接一个地更新两个表。

更新(table1_details);

更新(table2_details);

因此,如果更新在table1中失败,则不应更新table2或应该回滚。

如何处理这种情况。我知道我必须使用交易。有人可以帮助代码!!!  我正在使用带有spring和hibernate的Java。

2 个答案:

答案 0 :(得分:2)

这个问题有点宽泛,有几种方法可以实现,但我会:

  • 使用Spring将Hibernate SessionFactory注入DAO对象。
  • 使用Spring在服务对象中注入DAO并在业务方法中调用它们。
  • 在业务方法级别使用Spring声明式事务管理(使用Spring AOP或@Transactional)。

这样的事情:

@Transactional
public void doSomething() {
    dao1.foo();
    dao2.bar();
}

有关配置的更多详细信息,请查看Spring文档的Chapter 9. Transaction management

答案 1 :(得分:0)

我记不起正确的api,但是这样的话:

    Transaction tx = em.getTransaction();

    tx.begin();
    try {
        update1(); update2();
    }
    catch(Exception e) {
        failed = true
    }
    finally {
        if( !failed ) tx.commit();
        else tx.rollbacl();
    }