Когда мы можем выполнять транзакции в спящем режиме через сеанс, зачем снова HibernateTransactionManager
в Spring-hibernate
интеграции?
Какова его роль?
Почему мы не можем совершать транзакции напрямую без этого?
Когда мы можем выполнять транзакции в спящем режиме через сеанс, зачем снова HibernateTransactionManager
в Spring-hibernate
интеграции?
Какова его роль?
Почему мы не можем совершать транзакции напрямую без этого?
Благодаря АОП 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.