Если класс помечен как @Transactional, можно ли опустить обычный шаблонный код управления транзакциями? - PullRequest
1 голос
/ 05 октября 2011

Если класс помечен как @Transactional, означает ли это, что шаблон:

Transaction tx = session.getTransaction();

  try {
   ...
   ...
   ...
   tx.commit();


  }

  catch (Exception e) {
   tx.rollBack();
  }

можно опустить?Мой код на основе Hibernate определенно работает без него.

РЕДАКТИРОВАТЬ (СЛЕДУЮЩАЯ): Тогда почему люди продолжают писать шаблон в своих методах, даже если у них есть аннотированные классы?

Ответы [ 3 ]

3 голосов
/ 05 октября 2011

Да, пока

  1. Управление транзакциями настроено правильно, см. 13.3.3 Декларативное разграничение транзакций

  2. Вызовы этого метода не нарушают ограничений декларативного управления транзакциями на основе AOP, см. 10.5.1 Понимание реализации декларативной транзакции Spring Framework (или вы используете расширенные функции, такие как интеграция AspectJ чтобы преодолеть эти ограничения).
    То есть все вызовы этого метода выполняются для объекта, полученного из Spring, и никакие вызовы не выполняются из других методов того же класса.

  3. Session получается внутри метода путем вызова SessionFactory.getCurrentSession().

1 голос
/ 05 октября 2011

Пока у вас есть <tx:annotation-driven/>, да - это то, для чего нужна аннотация:)

Документы подробно описаны.

1 голос
/ 05 октября 2011

Конечно, это главная цель понятия декларативных транзакций. Более того, он более гибкий, так что вы можете использовать разные уровни распространения для объединения нескольких методов в транзакциях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...