Есть ли способ изменить то, что сериализуется Джексоном, в зависимости от того, охотно или лениво выбирается набор сущностей? - PullRequest
0 голосов
/ 31 марта 2020

Хорошей практикой является использование FetchType.LAZY, когда набор сущностей не всегда требуется извлекать (это очень распространенный сценарий). Мой вопрос: есть ли способ «полностью» сериализовать коллекцию сущностей, когда они охотно выбираются (сериализовать все поля, а не только поле идентификатора) и сериализовать только их идентификаторы, когда они лениво выбираются?

Для В качестве примера давайте предположим, что у нас есть две сущности, которые имеют двунаправленные сопоставленные отношения: Пост и Комментарий как один ко многим и много отношения один к одному, и они лениво извлечены . Мне не всегда нужны комментарии для поста, но давайте скажем, что они полезны в нескольких случаях. Если бы я всегда просто сериализовал только идентификаторы из комментариев поста (что я легко могу сделать, используя @JsonIdentityReference или пользовательский сериализатор), мне пришлось бы получить этот список идентификаторов и отправить запрос на их получение. Если они мне нужны .

С другой стороны, если бы я всегда охотно получал комментарии Конечно, я мог бы их сериализовать (например, используя @JsonIdentityInfo для управления двунаправленными отношениями или написания собственного сериализатора), но Я всегда получал бы информацию, которая не всегда нужна.

Кажется, что лучшее решение - просто получить набор прав, когда они действительно необходимы (например, используя @Query с ключевым словом fetch), но
Как сериализовать его несколькими способами в зависимости от того, какие объекты извлекаются или нет?
Я искал решение, но просто не мог найти способ сказать Джексону «полностью» сериализовать коллекцию сущностей, когда они охотно извлекаются (например, сериализовать содержимое комментариев, а не только их идентификаторы) и сериализовать Alize только идентификаторы, когда объекты выбираются лениво.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...