Как я могу сохранить древовидную структуру в JPA? - PullRequest
2 голосов
/ 13 февраля 2011

Мне нужно хранить большое количество узлов с отношением «многие ко многим» друг к другу (через родителей / детей).Как я могу сделать это в JPA?

Я знаю, что могу использовать @ManyToMany в списке моих родителей / детей, но тогда JPA загрузит всех родителей и их родителей, и так далее?Есть ли способ, которым я могу сделать это и загружать родителей или детей только на шаг?

Нерабочий код, который у меня сейчас (Node.java):

public String name;

@ManyToMany
@JoinTable(name = "NodeParent")
public List<Node> parents;

@ManyToMany
@JoinTable(name = "NodeChilds")
public List<Node> childrens;

1 Ответ

2 голосов
/ 13 февраля 2011

Для этого JPA имеет концепцию op lazy loading.

При выполнении итерации по коллекции, когда она все еще находится в контексте постоянства, каждый раз, когда вы ссылаетесь на ранее не загруженную сущность, она будет загружаться по требованию.

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

Наконец, специальное решение для спящего режима, которое может быть включено в JPA 2.1, называется так называемым fetch profiles.См. Выборочные профили и Выборочные профили в Hibernate 3.5 .

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