ho due entità:Come filtrare la raccolta in JPA/JPQL?
@Entity
public class Customer implements java.io.Serializable {
...
@OneToMany(fetch=FetchType.EAGER, mappedBy="customer")
private Set<CustomerOrder> customerOrders;
...
@Entity
public class CustomerOrder implements java.io.Serializable {
....
private double cost;
@ManyToOne
@JoinColumn(name="CUST_ID")
public Customer customer;
...
Ora nel mio JPQL, voglio tornare i clienti con il loro CustomerOrder.cost> 1000. Ad esempio, ci sono tre clienti A, B e C. A ha due ordini con costo = 1000 e 2000 rispettivamente. B ha tre ordini con costo = 2000,3000 e 500 rispettivamente. C ha un ordine con costo = 500. Ora voglio ottenere i tre clienti: A restituisce gli ordini solo con costo = 2000; B restituisce gli ordini con 2000 e 3000; C restituisce una raccolta ordini vuota.
ma la seguente restituirà sempre la collezione completa:
select c from Customer c, in(c.customerOrders) o where o.cost>1000
Come posso farlo in JPQL o in Hibernate in particolare?
jscoot dice che restituisce tutte le righe , quindi la tua prima query potrebbe non essere equivalente alla sua query poiché C ha un solo ordine e il suo costo è <1000. –