Это исключение происходит, потому что вы пытаетесь получить доступ к объектам, которые не были загружены внутри вашей транзакции.
Когда вы выходите из транзакции, вы больше не можете загружать объекты из базы данных.Но транзакция не является обязательной.
Я думаю, что у вас есть объекты с отношением OneToMany / ManyToMany, которое является lazyLoaded.Поскольку ваш сервис не транзакционный, соединение с БД закрыто, и вы больше не можете получить доступ к объектам.
У вас есть 2 варианта:
- Установить Eager fetch для ваших объектов(ваши объекты всегда загружаются).
- Сделайте ваш сервис транзакционным (объекты будут загружаться по требованию).
При активации отложенной загрузки вы должны знать о проблемах производительности (опция по умолчанию).Это действительно зависит от вашей бизнес-логики, важно ли ее использовать или нет, но лучше попытаться не иметь множественный доступ к БД.
Вы также можете обратиться к Entity Graph для расширенных настроек: https://www.baeldung.com/jpa-entity-graph
Кроме того, при разработке разрешите трассировку SQL в спящем режиме, чтобы увидеть, что происходит в фоновом режиме: https://www.mkyong.com/hibernate/hibernate-display-generated-sql-to-console-show_sql-format_sql-and-use_sql_comments/