использование @ org.springframework.transaction.annotation.Transactional за пределами уровня DAO? - PullRequest
4 голосов
/ 16 декабря 2010

У меня довольно классический вопрос: доступ к Lazy Collection за пределами DAO, который привел к возникновению LazyInitializationException.

Это чистое и разумное решение использовать @Transactional один какой-то метод службы внеDAO, кто использует эти ленивые коллекции?

Спасибо

Ответы [ 2 ]

7 голосов
/ 16 декабря 2010

Да, это так. Тот, кто знает, какие задачи должны быть единицей работы (Транзакцией), является службой, потому что именно он «знает» бизнес.

2 голосов
/ 17 декабря 2010

Neuquino имеет правильный ответ , но он не очень ясен и понятен, поэтому я попытаюсь перефразировать его:

Обычно требуется одна транзакция для одного метода обслуживания, которыйпочему вы аннотируете уровень обслуживания @Transactional, а не уровень DAO.(Хорошая особенность аннотации Spring @Transactional заключается в том, что она не зависит от базовой реализации, поэтому на уровне сервисов обычно не должно быть кода, характерного для вашего уровня персистентности, например, нет вызовов hibernate Session или JPA EntityManager).При модульном тестировании DAO поместите аннотации @Transactional в методы тестирования (ваши тесты - это сервисы, а не DAO).

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