2014-02-07 3 views
6

Когда мы можем совершать транзакции в спящем режиме через сеанс, в чем необходимость HibernateTransactionManager снова в Spring-hibernate интеграции?Почему HIbernateTransactionManager требуется весной?

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

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

+0

Дубликат http://stackoverflow.com/questions/4940815/benefits-of-using-springs-transaction-management-vs-using-hibernate –

ответ

11

Что позволяет 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.

Смежные вопросы