Когда вы используете @Service и компонентное сканирование, бин создается контекстом, созданным сервлетом диспетчера (mvc). Поскольку управляемая транзакция аннотации определена в контексте корневого приложения, она не применяется к bean-компонентам в контексте сервлетов. Вы можете проверить это, удалив @Service и переместив определение bean-компонента в файл контекста сервлета - вы должны увидеть тот же результат.
Где, когда вы не используете компонентное сканирование - компонент определяется в XML контекста корневого приложения.
Исправление заключается в изменении тега компонентного сканирования в веб-слое, чтобы он включал только классы веб-слоя - либо с помощью другого базового пакета, либо с помощью фильтра включения / исключения. Добавьте еще один компонент сканирования в контексте корневого приложения для других компонентов.
Запросы могут работать, поскольку у вас может быть настроен OpenEntityManagerInViewInterceptor / Filter.