Как заставить спящий режим не запрашивать детей? - PullRequest
0 голосов
/ 25 ноября 2018

Я реализую HATEOAS в своем java-приложении с весенней загрузкой, и одна из вещей, которую нужно сделать в HATEOAS, - не возвращать дочерние объекты в ответе json.Вместо этого у вас есть ссылки, которые могут получить дочерние элементы этого объекта.

Например, компания может иметь много сотрудников.Если вы выполняете вызов GET для конкретной компании, обычным ответом будет объект JSON компании, содержащий список сотрудников.Я хочу, чтобы у JSON не было этой коллекции сотрудников.Теоретически, единственный запрос hibernate, который должен быть выполнен, - это оператор select в таблице компании.

Любая помощь очень ценится.

Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 25 ноября 2018

Просмотрите код для ассоциации типов, которую вы используете,

, например, в ManyToOne.class вы заметите строку FetchType fetch () по умолчанию EAGER.Это означает, что связанный объект будет загружен с нетерпением.аналогично, для OneToMany и для ManyToMany.class стратегией по умолчанию является Lazy.В зависимости от типа ассоциации, которую вы используете, всегда будет какая-то стратегия по умолчанию, но вы можете изменить эту стратегию

Если вы не хотите этого поведения, вам нужно изменить @ManyToOne (fetch = FetchType.LAZY)

0 голосов
/ 25 ноября 2018

Понял, что Джексон сделал дополнительный вызов, когда сериализовал объекты перед отправкой обратно.Был в состоянии использовать @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) на имущество сотрудника на объекте компании.Таким образом, я могу сохранить его как вложенный объект, если захочу, но при извлечении он не будет извлекать вложенные объекты (таким образом, не делая дополнительный вызов sql).

0 голосов
/ 25 ноября 2018

Можно использовать fetch Lazy, чтобы не показывать childs, вот пример:

@OneToMany(mappedBy = "parent", fetch = FetchType.LAZY, cascade = {CascadeType.ALL})
private List<Team> teams;
...