Я хочу добавить эту заметку к тому, что сказал «Кён Хван Мин» выше.
Предположим, вы используете Spring Rest с этим простым архитектором:
Контроллер <-> Сервис <-> Репозиторий
И вы хотите вернуть некоторые данные в интерфейс, если вы используете FetchType.LAZY
, вы получите исключение после того, как вернете данные в метод контроллера, так как сеанс закрыт в Сервисе, поэтому JSON Mapper Object
не могу получить данные.
Существует три распространенных варианта решения этой проблемы, в зависимости от дизайна, производительности и разработчика:
- Самый простой - использовать
FetchType.EAGER
, чтобы сеанс все еще оставался живым при методе контроллера.
- Антишаблоны Решения, позволяющие оживить сеанс до завершения выполнения, создают огромную проблему с производительностью в системе.
- Рекомендуется использовать
FetchType.LAZY
с методом преобразователя для передачи данных из Entity
в другой объект данных DTO
и отправки их в контроллер, поэтому исключений нет, если сеанс закрыт.