Не существует «правильного» пути; это зависит от того, чего вы пытаетесь достичь. Существует несколько отдельных вопросов, связанных с ответом на ваш вопрос, как описано ниже.
- Шаблон доступа к данным. Традиционный шаблон в корпоративной Java заключается в том, чтобы ваши контроллеры обращались к DAO (объектам доступа к данным), которые обрабатывают постоянство. В этом шаблоне аннотации вашей транзакции будут размещаться в методах DAO, а не в методах контроллера. Тем не менее, многие люди считают DAO излишними и предпочитают, чтобы менеджер сущностей был введен в контроллер. Это вполне приемлемая альтернатива, и, насколько я могу судить, именно такой подход вы выбрали.
- Потокобезопасность: Вы должны знать, что экземпляры диспетчера сущностей не являются поточно-ориентированными, поэтому ваши контроллеры не должны быть одиночными и должны иметь объем запросов. Другими словами, вы не можете совместно использовать менеджер сущностей по нескольким запросам, поэтому вы должны настроить свои контроллеры на повторное создание и вводить нового менеджера сущностей для каждого запроса.
- Транзакции. Если для операции поиска данных требуется только один запрос, транзакция не требуется. Однако построение полного графа объектов обычно требует много запросов. В этом случае ваш поиск должен быть транзакционным, чтобы гарантировать согласованность, поскольку данные могут изменяться между запросами. Некоторые структуры фактически требуют, чтобы весь доступ к базе данных был транзакционным, иначе менеджер сущностей не будет введен правильно.
Таким образом, ваш шаблон доступа к данным в порядке, если ваши контроллеры находятся в области запроса. Однако ваши функции "GET" должны быть транзакционными, если в создании графа объектов будет задействовано много запросов.