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.
Die kurze Antwort ist; Nein, es gibt keine Standardmethode, dies zu tun.
Sie müssen native sql.
verwendenSie 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.
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.
Tags und Links java jpa hibernate persistence