为什么Spring中需要HIbernateTransactionManager?

时间:2014-02-07 10:29:30

标签: spring hibernate spring-mvc transactionmanager

当我们可以通过会话在休眠中执行事务时,HibernateTransactionManagerSpring-hibernate集成中需要再次需要什么?

它的作用是什么?

为什么我们不能直接进行交易呢?

1 个答案:

答案 0 :(得分:13)

由于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 documentation中有详细描述。