JPA query zum abrufen aller Knoten in einem Baum
Habe ich Baum-Strukturen gespeichert sind, in eine DB-Tabelle. Die Tabelle speichern kann, mehrere Bäume. Ich brauche eine Abfrage, die zurückkehren wird, werden alle Knoten in einer single Baum. Ich habe die folgenden Seiten als Mittel, sondern die Abfragen in Ihnen wird die Last aller Knoten für alle Bäume in PersistenceContext (nicht, dass das laden der ganzen Tabelle?). Ich will nicht zu tun, dass ich nur laden wollen einen Baum. Wie kann ich das erreichen??
Ich bin mit JPA 2, Hibernate als provider.
OpenJPA 1.2.x wählen Sie Baumstruktur mit JPQL
http://www.tikalk.com/java/load-a-tree-with-jpa-and-hibernate#comment-1821
[UPDATE] auf der Grundlage einer Anregung von @bennidi, Frage ich mich, wenn ich etwas wie dieses:
@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-Abfrage:
select distinct n from Node n left join fetch n.children where n.rootId = ROOT_ID
Ich habe aber eine Frage, sollte ich eine zweite Tabelle zur Aufrechterhaltung der Eltern-Kind-Beziehungen wie in dieser Artikel, oder wird es in Ordnung sein, wenn ich nur eine auf sich selbst verweisende Tabelle. Mit dem ehemaligen zu verlangen scheint ein bisschen mehr Pflege und wahrscheinlich ein wenig komplexer Abfragen. Ist es das Wert? Ich bin mir nicht sicher, welche Probleme die Artikel Adressierung.
- dies ist eine großartige Idee, die Sie mir hier!! hast du eine Möglichkeit gefunden werden, die vice Versa??
- und für die info alle fetchTypes du verwendest hier sind Standardwerte! Sie könnten Sie entfernen, und Sie alle wären die gleichen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, es ist nicht natürlich, zu speichern, rekursive Strukturen in relationalen Datenbanken. Auch die Antwort auf Ihre Frage hängt davon ab, das schema, das Sie wählen, um Ihr Modell Knoten und Bäume. Wenn Sie einen selbst referenzierenden node-Tabelle enthält die Eltern-Kind-Relationen als foreign-key-es gibt keine Möglichkeit, wählen Sie alle Knoten, die Kinder sind von einem bestimmten Knoten mit einer Abfrage. Ich denke, du solltest eine Tabelle für jede Struktur und jeder Knoten den Verweis auf den Baum. Dann können Sie einfach wählen Sie alle Knoten eines bestimmten Baumes und erstellt die Struktur des Baumes durch die Analyse der Knoten.
Haben Sie einen Blick auf diese post: http://www.codeproject.com/Articles/8355/Trees-in-SQL-databases