Hibernate - HQL zu Holen, eine Sammlung von Unidirektionale OneToMany-Beziehung
Ich habe eine Klasse mit einer unidirektionalen one to many Beziehung wie folgt:
public class Order {
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name="order_item", joinColumns={@JoinColumn(name="order_id")}, inverseJoinColumns={@JoinColumn(name="item_id")})
public Set<Item> getItems() {
return items;
}
}
Normalerweise immer der Inhalt der Bestellung ist unkompliziert:
List<Item> items = order.getItems();
Aber aus irgendeinem Grund, vielleicht möchte ich meine filter die Ergebnisse in einigen Weg und Hole nur Teil einer Sammlung von Elementen, wie alle Elemente, die mehr als einen bestimmten Preis, die unter einem bestimmten Lager etc in der Schnellste Weg möglich (Nicht Rückgabe dann alle dann danach filtern). Dazu würde ich eine HQL-query zum abrufen der Elemente für eine bestimmte Reihenfolge und fügen Sie ein paar mehr Sachen in meine where-Klausel oder auf meinem query-Objekt.
Intuitiv würde ich wollen, dass diese Verhalten (völlig zu Unrecht):
SELECT jointable.ITEM from order_item as jointable inner join jointable.order where order = :order
Aber natürlich ist dies falsch, wie HQL funktioniert in Bezug auf die zugeordneten Entitäten, so dass ich nicht verwenden können, die join-Tabelle in der Abfrage. Also, was ist der richtige Weg, dies zu tun?
Edit:
Habe ich die Antwort gefunden auf diese Frage, ich möchte folgende Abfrage:
Select o.items from Order o where o = ?
Dies ermöglicht es mir zu Holen, die Auflistung der Elemente für eine Bestellung, ohne dass eine bidirektionale Beziehung. Ich bin jetzt aber verwirrt, auf der zweiten Stufe von dieser Frage, die wie filter die Ergebnisse dieser Erhebung, die am meisten einfache Beispiel:
Select o.items from Order o where o = ? order by o.items.somenumberfield asc
Gibt illegalen Versuch zu dereferenzieren Sammlung, so, wie würde ich meine filter posten?
Edit:
Den ticket-Lösung ist tatsächlich korrekt, habe ich falsch verstanden, die Lösung ursprünglich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
HQL-Abfragen verwenden von Entitäten und Ihrer Verbände. Die Tatsache, dass der Verein nutzt eine join-Tabelle oder nicht, ist nicht wichtig, für HQL: Sie navigieren durch Verbände und Hibernate nicht die entsprechende übersetzung in SQL.
Es klingt wie Sie möchten anzeigen, dass die andere Seite dieser Beziehung, D. H. diese bi-direktionale mapping.
Dann können Sie die Bestellnummer in Ihrer HQL:
Aus der HQL Dokumentation:
Die Tatsache, dass Sie versuchen zu tun, diese Abfrage lässt vermuten, dass die Beziehung zwischen einer Zeile und deren Reihenfolge ist wichtig!