Mam klasę z jednokierunkowego jeden do wielu relacji, co następuje:Hibernate - HQL sprowadzić kolekcję ze stosunku Jednokierunkowy OneToMany
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;
}
}
Normalnie coraz zawartość tego celu jest prosta:
List<Item> items = order.getItems();
Ale z jakiegokolwiek powodu mogę chcieć odfiltrować moje wyniki w jakiś sposób i odzyskać tylko część kolekcji przedmiotów, takich jak wszystkie przedmioty powyżej określonej ceny, poniżej określonego zasobu itp. W najszybszy możliwy sposób (Nie wracając wtedy wszystkie następnie filtrowanie). Aby to zrobić, uruchomiłbym kwerendę HQL, aby pobrać elementy dla określonego zamówienia i dodać trochę więcej rzeczy do mojej klauzuli where lub do mojego obiektu zapytania.
Intuicyjnie chciałbym tego zachowania (co jest całkowicie błędne):
SELECT jointable.ITEM from order_item as jointable inner join jointable.order where order = :order
Ale oczywiście to jest złe jak HQL działa w zakresie odwzorowanych jednostek, więc nie mogę użyć tabeli dołączyć w zapytaniu. Więc jaki jest właściwy sposób, aby to zrobić?
Edit:
znalazłem odpowiedź na to pytanie, chcę następujące zapytanie:
Select o.items from Order o where o = ?
To pozwala mi pobrać zbiór elementów do zamówienia, bez konieczności użyj relacji dwukierunkowej. Teraz jestem jednak mylić na drugim etapie tej kwestii, która jest jak filtrować wyniki tej kolekcji, najbardziej Prostym przykładem jest:
Select o.items from Order o where o = ? order by o.items.somenumberfield asc
Które zwraca nielegalną próbę kolekcji dereference, tak jak bym filtrować moje rzeczy?
Edit:
Rozwiązanie Bilet jest rzeczywiście słuszne, ja misread rozwiązanie pierwotnie.
dziękuję za pomoc, zobacz moją edycję – mogronalol