que tienen dos entidades:Cómo filtrar la recopilación en 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;
...
Ahora en mi JPQL, quiero volver a esos clientes con su CustomerOrder.cost> 1000. Por ejemplo, hay tres clientes A, B y C. A tiene dos órdenes con un costo = 1000 y 2000 respectivamente. B tiene tres órdenes con un costo = 2000,3000 y 500 respectivamente. C tiene una orden con costo = 500. Ahora quiero obtener los tres clientes: A solo devuelve las órdenes con costo = 2000; B devuelve las órdenes con 2000 y 3000; C devuelve una colección de pedidos vacía.
Pero el siguiente siempre devolverá la colección completa:
select c from Customer c, in(c.customerOrders) o where o.cost>1000
¿Cómo se puede hacer eso en JPQL o en Hibernate en particular?
jscoot dice que devuelve todas las filas , por lo que su primera consulta puede no ser equivalente a su consulta, ya que C tiene solo un pedido, y su costo es <1000. –