JPA-Abfrage zum Abrufen des gesamten Baums

8

Ich habe eine Klasse, die alle Kategorien modelliert und sie können hierarchisch geordnet werden.

%Vor%

Ich muss alle hierarchisch geordneten Kategorien bekommen (ich meine, jeder Vater, gefolgt von seinen Kindern und Vätern, alphabetisch geordnet auf jeder Ebene), wie sie zum Beispiel mit PRIOR in Orakel gemacht werden könnten. Ist es möglich, dies mit einer JPA-Abfrage (nicht eine SQL-Abfrage) zu tun?

Danke.

    
Javi 08.04.2010, 08:51
quelle

2 Antworten

7

Die kurze Antwort ist; Nein, es gibt keine Standardmethode, dies zu tun.

Sie müssen native sql.

verwenden

Sie können möglicherweise den Oracle Hibernate Dialekt erweitern und einige Benutzerfunktionen / -erweiterungen hinzufügen, damit Hibernate PRIOR- oder CONNECT BY-Klauseln generiert. Dies verhindert jedoch, dass Ihre App strikt JPA- und datenbankunabhängig ist.

    
Gareth Davis 08.04.2010, 08:55
quelle
1

Unter der Annahme, dass in dieser Hierarchie ein "Vater" mehr als ein Kind haben kann, sollte das Feld father mit @ManyToOne kommentiert werden.

Wenn Sie ein Feld haben, das alle Mitglieder eines Baumes teilen, oder wenn der Baum die gesamte Tabelle enthält, dann ist möglich, dies mit JPA auf effiziente Weise zu tun, jedoch nicht durch eine einzelne JPA-Abfrage.

Sie müssen einfach alle Mitglieder des Baums vorab abrufen und dann den Baum durchlaufen:

%Vor%

Beachten Sie die @OrderedBy -Anmerkung im Feld Unterkategorien.

Jetzt können Sie den gesamten Baum erhalten, indem Sie zuerst alle Kategorien in eine Liste auflisten, so dass sie alle im Speicher sind, und dann den Baum durchqueren.

%Vor%

Ich lerne JPA gerade jetzt selbst, also könnte mir etwas Wichtiges fehlen, aber dieser Ansatz scheint bei mir zu funktionieren.

    
itsadok 03.03.2011 16:22
quelle

Tags und Links