mi hanno una classe con uno unidirezionale ai molti rapporto come segue:Hibernate - HQL per andare a prendere una collezione dal rapporto unidirezionale 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;
}
}
Normalmente ottenere i contenuti di questo ordine è semplice:
List<Item> items = order.getItems();
Ma per qualche ragione potrei voler filtrare i miei risultati in qualche modo e recuperare solo una parte di una collezione di articoli come tutti gli articoli più di un certo prezzo, sotto un certo stock ecc nel modo più veloce possibile (non ritorna poi tutto quindi filtrare in seguito). Per fare ciò, eseguo una query HQL per recuperare gli elementi per un particolare ordine e aggiungere altro materiale nella mia clausola where o sul mio oggetto query.
Intuitivamente vorrei questo comportamento (che è completamente sbagliato):
SELECT jointable.ITEM from order_item as jointable inner join jointable.order where order = :order
Ma naturalmente questo è sbagliato, come funziona HQL in termini di entità mappate, quindi non posso utilizzare la tabella unirsi alla query. Allora, qual è il modo corretto per farlo?
Edit:
ho trovato la risposta a questa domanda, voglio la seguente query:
Select o.items from Order o where o = ?
Questo mi permette di prendere la collezione di articoli per un ordine, senza dover utilizzare una relazione bidirezionale. Ora sono tuttavia confuso sulla seconda fase di questa domanda, che è come filtrare i risultati di questa collezione, l'esempio più semplice essere:
Select o.items from Order o where o = ? order by o.items.somenumberfield asc
che restituisce tentativo illegale di raccolta dereferenziare, così come mi sarebbe filtrare i miei oggetti?
Edit:
La soluzione biglietto è in realtà corretto, ho letto male la soluzione originariamente.
grazie per il vostro aiuto, vedere la mia modifica – mogronalol