работа с NamedEntityGraph - PullRequest
0 голосов
/ 14 мая 2018

У меня есть 3 уровня образца сущностей: Год -> Класс -> Студенты, что-то вроде этого

@Entity
public class Year {
  @OneToMany(cascade = CascadeType.ALL)
  @JoinColumn(name="year_id")
  Set<Class> classes;
}

@Entity
public class Class {
  @OneToMany(cascade = CascadeType.ALL)
  @JoinColumn(name="class_id")
  Set<Student> students;
}

@Entity
public class Student {
  String name;
}

Итак, я создаю в своем классе Year entityGraph

@NamedEntityGraph(name = "Year.classes",
        attributeNodes = @NamedAttributeNode("classes"))

Но в некоторых методах в моем сервисе я хочу только вернуть классы, поэтому я помещаю в свой репозиторий

@EntityGraph(value = "Year.classes", type = EntityGraph.EntityGraphType.LOAD)
public List<Year> findOne(){
}

но в некоторых методах моего служения я хочу вернуть 3 уровня

в этом случае мне нужно создать @NameEntityGraph в моем классе (и настроить для возврата учеников)

@NamedEntityGraph(name = "Class.students",
        attributeNodes = @NamedAttributeNode("students"))

так как я могу настроить этот метод так, чтобы он тоже возвращал ученикам?

@EntityGraph(value = "Year.classes", type = EntityGraph.EntityGraphType.LOAD)
public List<Year> findTwo(){
}

ТКС

1 Ответ

0 голосов
/ 15 мая 2018

Ваш график Class.students должен быть определен и указан как подграф в новом EntityGraph для класса Year. Примерно так должно работать:

@NamedEntityGraph(name = "Year.full",
    attributeNodes = @NamedAttributeNode(
        value = "classes", 
        subgraph = "Class.students"),
    subgraphs = @NamedSubgraph(
        name = "Class.students", 
        attributeNodes = @NamedAttributeNode("students")
    )
)

Здесь вы можете узнать больше об этом

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