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