Ich habe einen Hibernate-Kriterienaufruf, den ich in einer SQL-Anweisung ausführen möchte. Was ich versuche, ist, Instanzen von Parent zu wählen, die Children mit einer Eigenschaft in einem Bereich von Werten haben (SQL IN-Klausel), während alle Kinder mit einem Outer-Join geladen werden. Folgendes habe ich bisher:
%Vor%Hier einige Beispieldaten:
%Vor%Ich möchte die Eltern und ALLE ihre Kinder zurückgeben, wenn eines der Kinder eine Eigenschaft hat, die meinen Bindungsparametern entspricht. Angenommen, Eigenschaften sind ein Array mit {2}. In diesem Fall gibt der Aufruf die Eltern A und C zurück, aber ihre untergeordneten Sammlungen enthalten nur Element 2. I.e. Eltern [Kinder]:
A [2] & amp; C [2]
Was ich will ist:
A [0, 2, 7] & amp; C [1, 2 3]
Wenn dies kein Fehler ist, scheint es eine gebrochene Semantik zu sein. Ich sehe nicht, wie das Aufrufen von A.getChildren () oder C.getChildren () und das Zurückgeben von 1 Datensatz jemals als korrekt betrachtet werden - dies ist keine Projektion. I.e. Wenn ich die Abfrage so erweitere, dass sie die Standardauswahl fetch verwendet, gibt sie die richtigen untergeordneten Sammlungen zurück, die eine Vielzahl von Abfragen enthalten:
%Vor%Ist das ein Fehler? Wenn nicht, wie kann ich mein gewünschtes Ergebnis erreichen?
getChildren () ist nur der Name des Getter / Setter, Ihre Abfrage bestimmt, wie die Objekte gefüllt werden.
Ich werde hier raten, dass der erste Teil ausspuckt
%Vor%was Sie nicht bekommen, was Sie wollen. Was würden Sie tun wollen, wenn Sie dies in Raw SQL schreiben:
%Vor%Wenn Sie Ihre Kriterien entsprechend neu anordnen, könnte das der Fall sein, wenn der letzte diese Abfrage nicht erzeugt. (Könnten Sie auch posten, was der Ruhezustand für jeden erzeugt?)
Ich würde die Kriterien mit der Kindklasse starten. Sie erhalten eine Liste mit allen Kindern, und dann können Sie iterieren und Eltern für jedes Kind erhalten.
Tags und Links java hibernate orm hibernate-criteria