Почему HIbernateTransactionManager требуется в Spring?

Когда мы можем выполнять транзакции в спящем режиме через сеанс, зачем снова HibernateTransactionManager в Spring-hibernate интеграции?

Какова его роль?

Почему мы не можем совершать транзакции напрямую без этого?


person ramu p    schedule 07.02.2014    source источник
comment
Дубликат stackoverflow.com/questions/4940815/   -  person Arturo Volpe    schedule 07.02.2014


Ответы (1)


Благодаря АОП 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.

person JB Nizet    schedule 07.02.2014