Java 事务管理

Java 事务管理,java,hibernate,spring,orm,Java,Hibernate,Spring,Orm,在我的代码中,我正在一个接一个地更新两个表 更新(表1_详情) 更新(表2_详情) 因此,如果表1中的更新失败,则不应更新或回滚表2 如何处理这种情况。我知道我必须使用事务处理。有人能帮我写代码吗!!! 我将Java与spring和hibernate一起使用。我想不起正确的api,但类似于以下内容: Transaction tx = em.getTransaction(); tx.begin(); try { update1(); update2();

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

更新(表1_详情)

更新(表2_详情)

因此,如果表1中的更新失败,则不应更新或回滚表2

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

我想不起正确的api,但类似于以下内容:

    Transaction tx = em.getTransaction();

    tx.begin();
    try {
        update1(); update2();
    }
    catch(Exception e) {
        failed = true
    }
    finally {
        if( !failed ) tx.commit();
        else tx.rollbacl();
    }
@Transactional
public void doSomething() {
    dao1.foo();
    dao2.bar();
}

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

  • 使用Spring将Hibernate
    SessionFactory
    注入DAOs对象
  • 使用Spring在服务对象中注入DAO,并在业务方法中调用它们
  • 在业务方法级别使用Spring声明性事务管理(使用Spring AOP或
    @Transactional
大概是这样的:

    Transaction tx = em.getTransaction();

    tx.begin();
    try {
        update1(); update2();
    }
    catch(Exception e) {
        failed = true
    }
    finally {
        if( !failed ) tx.commit();
        else tx.rollbacl();
    }
@Transactional
public void doSomething() {
    dao1.foo();
    dao2.bar();
}

有关配置的更多详细信息,请查看Spring文档的。问题出在哪里?你不能阅读在线文档吗?例如:(谷歌在“spring hibernate transaction”搜索中的第一个答案)!