Об услугах и @Transactional - PullRequest
3 голосов
/ 26 января 2012

Если у меня есть класс обслуживания, который вызывает три других класса обслуживания подряд, и каждый из этих подуслуг в какой-то момент должен иметь дело с объектом DAO, как я могу сделать так, чтобы сервис-оболочка обернула их всеодна транзакция?Будет ли это так же просто, как комментировать обертку с помощью @Transactional?Что если DAO уже помечен как @Transactional?

Ответы [ 3 ]

4 голосов
/ 26 января 2012

Распространение транзакции по умолчанию в среде Spring - REQUIRED, что означает, что транзакция создается, если она еще не существует или код присоединяется к существующей:

Поддержите текущую транзакцию, создайте новую, если ее не существует.Аналог атрибута транзакции EJB с тем же именем.

Это настройка по умолчанию для аннотации транзакции.

Это означает, что если вы оберните вызовы трех транзакционных методов в одном транзакционном методе, они все будут выполняться в одной транзакции,Просто так.

См. Также:

2 голосов
/ 26 января 2012

Если вы аннотируете внешнюю службу как @Transactional, и ваши DAO также являются @Transactional и вызываются службой, они по умолчанию присоединятся к внешней транзакции, как вы и надеялись.

0 голосов
/ 26 января 2012

на самом деле это вопрос о вложенной транзакции (http://en.wikipedia.org/wiki/Nested_transaction). с пружиной, (предположим, что вы используете версию 3 и аннотацию), для режима транзакции по умолчанию требуется REQUIRED. Если вы задаете эту модель для своих методов обслуживания, все методы, обернутыеваша служба-оболочка будет использовать хост-транзакцию, что означает, что они будут выполняться в одной транзакции.

...