Выбор ответа Middle Spring MVC и REST спрашивают часто обновлено

Сущность JPA в ответе контроллера

Вопрос

Контроллер возвращает JPA-сущность Order с ленивой коллекцией items и обратной ссылкой item.order. Что из этого НЕ является реальной проблемой?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Jackson не умеет сериализовать классы с аннотацией @Entity. Jackson сериализует сущности как обычные объекты, аннотация @Entity ему не мешает.

Варианты ответа

  1. Jackson не умеет сериализовать классы с аннотацией @Entityправильный ответ
  2. LazyInitializationException при сериализации, если сессия уже закрыта
  3. Бесконечная рекурсия из-за двунаправленной связи
  4. Утечка внутренних полей и привязка API к схеме БД

Разбор

Jackson сериализует сущности как обычные объекты, аннотация @Entity ему не мешает. Все остальные проблемы реальны: ленивая коллекция вне транзакции даёт LazyInitializationException (или N+1, если включён open-in-view), связь Order и Item в обе стороны зацикливает сериализацию, а любое переименование колонки ломает API. Поэтому наружу отдают DTO.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.