Рассматривая стек приложения с SpringBoot, MySQL, SpringData / JPA и Джексоном.
Я пытаюсь найти способ ограничить размер динамически извлекаемых сущностей.В упрощенной схеме давайте предположим, что у нас есть сообщение с несколькими комментариями, но для быстрого предварительного просмотра я просто хочу получить первые 10 комментариев вместе с сообщением.
Я бы вызвал репозиторий SpringData для загрузкиотправьте сообщение с идентификатором 10, но сериализатор Джексона будет циклически проходить через все комментарии и создавать потенциально огромный вывод.
Самый простой способ, который я нашел, - это сказать Джексону @JsonIgnore
поле и затем при получении службыпервые 10 комментариев и прикрепить их к объекту в отдельном поле, помеченном как временное.
@JsonView(Views.Detailed.class)
@JsonProperty("comments")
@OneToMany(
mappedBy = "comment",
fetch = FetchType.LAZY
)
@OrderBy("created_at DESC")
@Limit(10) // This is the kind of annotation I'm looking for
List<Comment> comments = new ArrayList<>();
Я знаю, что мог бы создать Getter, который реализует логику для возврата подсписка, но в этой ситуации весь списокбудет извлечен, верно?
Со стороны Джексона я мог бы попытаться ограничить глубину и длину сериализации, используя собственный картограф или аннотацию (что было бы лучше и чище), но я не нашел способаДобейся этого.