私は2つのエンティティを持っています:
@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;
...
JPQL では、CustomerOrder.cost>1000 の顧客を返したいと考えています。たとえば、A、B、C の 3 人の顧客がいるとします。A には、それぞれコストが 1000 と 2000 の 2 つの注文があります。B には、コストがそれぞれ 2000、3000、500 の 3 つの注文があります。C には、cost=500 の注文が 1 つあります。ここで、3 人の顧客を取得したいと考えています。A は、cost=2000 の注文のみを返します。B は 2000 と 3000 の注文を返します。C は空の注文コレクションを返します。
ただし、次の場合は常に完全なコレクションが返されます。
select c from Customer c, in(c.customerOrders) o where o.cost>1000
特にJPQLまたはHibernateでそれを行うにはどうすればよいですか?