Как ограничить связанные с Hibernate объекты во время сериализации - PullRequest
0 голосов
/ 22 января 2019

Мой вопрос не в том, как избавиться от циклической зависимости, я знаю, как.

И, тем более, в нашем примере я буду использовать однонаправленное соединение.

Допустим, у нас естьмного связанных объектов:

@Entity
public class EntityOne {

    @OneToMany
    private Set<EntityTwo> entityTwoCollection;

}

@Entity
public class EntityTwo {

    @OneToMany
    private Set<EntityThree> entityThreeCollection;

}

@Entity
public class EntityThree {

    @OneToMany
    private Set<EntityFour> EntityFourCollection;

}

...
// 4, 5 ... 20

Если мы ничего не делаем и пытаемся сериализовать первый объект (EntityOne) в контроллере, при условии, что у него есть соединения, мы получим все двадцать сериализованных объектов, что ненеобходимо и очень дорого.

В моем случае мне нужно, чтобы первый объект (EntityOne) получал связанные объекты только к третьему.А для второго объекта (EntityTwo) вообще не отображайте связанные объекты, только ваши поля.

Вопрос в том, какие методы я должен использовать для отображения объектов в моем API на определенной глубине.Чтобы не делать запросы к базе данных объектов, которые мне не нужно отображать.

1 Ответ

0 голосов
/ 22 января 2019

Это прекрасный пример того, почему мы не должны выставлять наши сущности напрямую через API, а вместо этого использовать некоторую форму DTO. Это позволяет четко отделить внутреннее представление от внешнего представления. Для тех, кто использует Spring REST, dto является расширением Resource. Во многих моих проектах я использую Dozer для отображения между сущностью и dto. Dozer выполняет сопоставление с подстановочными знаками, то есть любые поля с одинаковыми именами и с совместимыми типами будут сопоставляться автоматически (нет сопоставления для записи). Любые поля, не входящие в ваш DTO, не будут отображены.

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