Hibernate - HQL zum Abrufen einer Sammlung aus der unidirektionalen OneToMany-Beziehung

8

Ich habe eine Klasse mit einer unidirektionalen Eins-zu-Viele-Beziehung wie folgt:

%Vor%

Normalerweise ist es einfach, den Inhalt dieser Bestellung zu erhalten:

%Vor%

Aber aus welchen Gründen auch immer möchte ich meine Ergebnisse in irgendeiner Weise filtern und nur einen Teil einer Sammlung von Gegenständen wie zB alle Gegenstände mehr als einen bestimmten Preis, unter einem bestimmten Vorrat usw. auf schnellstem Wege abrufen (nicht zurückkommen) alles dann nachher filtern). Um dies zu tun, würde ich eine HQL-Abfrage ausführen, um die Elemente für eine bestimmte Reihenfolge abzurufen und einige weitere Elemente in meine Where-Klausel oder auf mein Abfrageobjekt hinzuzufügen.

Intuitiv möchte ich dieses Verhalten (was völlig falsch ist):

%Vor%

Aber das ist natürlich falsch, da HQL in Bezug auf abgebildete Entitäten funktioniert. Daher kann ich die Join-Tabelle in der Abfrage nicht verwenden. Also, was ist der richtige Weg, dies zu tun?

Bearbeiten:

Ich habe die Antwort auf diese Frage gefunden, ich möchte die folgende Abfrage:

%Vor%

Dadurch kann ich die Sammlung von Artikeln für einen Auftrag abrufen, ohne eine bidirektionale Beziehung zu verwenden. Ich bin jetzt jedoch verwirrt auf der zweiten Stufe dieser Frage, wie man die Ergebnisse dieser Sammlung filtern kann, das einfachste Beispiel ist:

%Vor%

Was einen illegalen Versuch zur Dereferenzierung der Sammlung zurückgibt, also wie würde ich meine Elemente filtern?

Bearbeiten:

Die Ticketlösung ist eigentlich korrekt, ich habe die Lösung ursprünglich falsch gelesen.

    
mogronalol 24.11.2011, 09:52
quelle

2 Antworten

6
%Vor%

HQL-Abfragen verwenden Entitäten und ihre Zuordnungen. Die Tatsache, dass die Verknüpfung eine Join-Tabelle verwendet oder nicht, ist für HQL nicht wichtig: Sie navigieren durch Zuordnungen und Hibernate führt die entsprechende Übersetzung in SQL durch.

    
JB Nizet 24.11.2011, 11:18
quelle
3

Es klingt, als ob Sie die andere Seite dieser Beziehung abbilden möchten, d. h. diese bidirektionale Abbildung machen.

Dann können Sie die Bestellnummer in Ihrem HQL verwenden:

%Vor%

Aus der HQL Dokumentation :

  

von Katze als Katze, wo cat.mate.id = 69   Die Abfrage ist effizient und erfordert keinen Tabellenbeitritt.

Die Tatsache, dass Sie versuchen, diese Abfrage auszuführen, legt nahe, dass die Beziehung zwischen einer Linie und ihrer Reihenfolge wichtig ist!

    
Alex Barnes 24.11.2011 11:20
quelle

Tags und Links