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

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

Какова роль этого?

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

1 ответ

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

Другие вопросы по тегам