Выбор ответа Middle Spring MVC и REST спрашивают часто обновлено
Сущность JPA в ответе контроллера
Вопрос
Контроллер возвращает JPA-сущность Order с ленивой коллекцией items и обратной ссылкой item.order. Что из этого НЕ является реальной проблемой?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Jackson не умеет сериализовать классы с аннотацией @Entity. Jackson сериализует сущности как обычные объекты, аннотация @Entity ему не мешает.
Варианты ответа
- Jackson не умеет сериализовать классы с аннотацией @Entityправильный ответ
- LazyInitializationException при сериализации, если сессия уже закрыта
- Бесконечная рекурсия из-за двунаправленной связи
- Утечка внутренних полей и привязка API к схеме БД
Разбор
Jackson сериализует сущности как обычные объекты, аннотация @Entity ему не мешает. Все остальные проблемы реальны: ленивая коллекция вне транзакции даёт LazyInitializationException (или N+1, если включён open-in-view), связь Order и Item в обе стороны зацикливает сериализацию, а любое переименование колонки ломает API. Поэтому наружу отдают DTO.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.