В чем разница между использованием шаблона @Transactional и Spring? - PullRequest
8 голосов
/ 18 мая 2009

Если я использую @Transactional в моем DAO, будут ли все мои запросы EntityManager инкапсулированы с commit и close? Или мне нужно использовать шаблон Spring (шаблон JPA, шаблон Hibernate)? В чем разница между использованием шаблонов @Transactional и Spring?

Ответы [ 4 ]

4 голосов
/ 18 мая 2009

Шаблонные классы Spring предназначены только для обеспечения более приятного API для выполнения операций персистентности - они не имеют дело с транзакциями. Если вы хотите иметь транзакционные операции, вам нужно либо использовать подход аннотации @Transactional, либо использовать TransactionTemplate.

3 голосов
/ 18 мая 2009

Разница в том, что при использовании разграничения транзакций на основе аннотаций (@Transactional) и TransactionTemplate заключается в том, что использование TransactionTemplate связывает вас с инфраструктурой транзакций Spring и означает, что вы будете программно обрабатывать установку статуса транзакции, если транзакция должен быть откат. Разграничение транзакций на основе аннотаций можно использовать с поддержкой транзакций Spring или с транзакциями AspectJ вне контейнера Spring.

См. Также онлайн-документацию для транзакций весной .

1 голос
/ 18 мая 2009

Когда вы используете @transactional с правильной конфигурацией Spring, Spring распознает, что метод нуждается в транзакции, и будет обрабатывать создание, принятие и закрытие транзакции для вас.

Как сказал Скаффман, @transactional напрямую не связан с шаблонными классами. Их можно использовать для любого класса, которому могут потребоваться транзакции.

0 голосов
/ 18 мая 2009

Вы хотите сказать, что usin @transactional будет инкапсулировать мои методы dao с помощью commit, close или при использовании шаблона транзакции Spring (jpatemplate, hibernatetemplate)?

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