9

当我们在hibernate中可以通过session做事务时,HibernateTransactionManagerSpring-hibernate集成中又需要什么?

它的作用是什么?

为什么没有这个我们就不能直接进行交易呢?

4

1 回答 1

17

多亏了 AOP,Spring 允许做的是使用声明性事务,就像您可以使用 EJB 一样。

而不是做

public void doSomething() {
    Session sess = factory.openSession();
    Transaction tx = null;
    try {
        tx = sess.beginTransaction();

        // do some work
        ...

        tx.commit();
    }
    catch (RuntimeException e) {
        if (tx != null) tx.rollback();
        throw e; // or display error message
    }
    finally {
        sess.close();
    }
}

你只是做

@Transactional
public void doSomething() {
    // do some work
}

由于 Spring 为您处理事务逻辑,因此更具可读性、可维护性、更少麻烦和更安全。这就是需要事务管理器的原因:告诉 Spring 它应该如何为您处理事务。因为它也可以使用相同的声明性模型,但使用 JPA 事务或 JTA 事务。

这在Spring 文档中有很好的描述。

于 2014-02-07T10:36:00.777 回答