Ich habe Baumstrukturen, die in einer DB-Tabelle gespeichert sind. Die Tabelle kann mehrere Bäume speichern. Ich brauche eine Abfrage, die alle Knoten in einem einzigen Baum zurückgibt. Ich habe die folgenden Sites als Ressourcen verwendet, aber die Abfragen darin laden alle Knoten für alle Bäume in PersistenceContext (lädt nicht die gesamte Tabelle?). Ich möchte das nicht machen, ich möchte nur einen Baum laden. Wie erreiche ich das?JPA-Abfrage für alle Knoten in einem einzigen Baum
Ich verwende JPA 2 mit Hibernate als Provider.
OpenJPA 1.2.x select tree structure using JPQL
http://www.tikalk.com/java/load-a-tree-with-jpa-and-hibernate#comment-1821
[UPDATE] Basierend auf einem Vorschlag von @bennidi, frage ich mich, ob ich etwas wie folgt verwenden können:
@Entity
public class Node {
private String name;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "rootId")
private Node root;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "parentId")
private Node parent;
@OneToMany(mappedBy = "parent", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@OrderBy("name")
private List<Node> children = new LinkedList<Node>();
}
JPQL query:
select distinct n from Node n left join fetch n.children where n.rootId = ROOT_ID
Ich habe jedoch eine Frage, sollte ich eine zweite Tabelle erstellen, um die Eltern-Kind-Beziehungen wie in 01 zu pflegen, oder wird es in Ordnung sein, wenn ich nur eine selbstreferenzierende Tabelle verwendet habe. Mit dem ersten zu gehen scheint ein bisschen mehr Wartung und wahrscheinlich ein wenig komplexere Abfragen zu erfordern. Ist es das wert? Ich bin nicht sicher, welche Probleme der Artikel anspricht.
dies eine gute Idee ist, du mich hier gab !! Hast du einen Weg gefunden für den Vizeblock? – azerafati
und für die Info alle fetchTypes, die Sie hier verwenden, sind Standardeinstellungen! Sie könnten sie entfernen und sie alle wären gleich – azerafati