【问题标题】:Transaction Management事务管理
【发布时间】:2010-04-14 17:52:12
【问题描述】:

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

更新(table1_details);

更新(table2_details);

所以如果 table1 更新失败,table2 不应该更新或者应该回滚。

如何处理这种情况。我知道我必须使用事务。有人可以帮忙写代码吗!!! 我正在将 Java 与 spring 和 hibernate 一起使用。

【问题讨论】:

标签: java hibernate spring orm


【解决方案1】:

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

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

类似这样的:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-12-02
      • 2010-11-29
      • 2017-03-29
      • 2015-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多