我有两个实体:
@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。A 有两个订单,成本分别为 1000 和 2000。B 有三个订单,成本分别为 2000,3000 和 500。C 有一个订单,成本=500。现在我想得到三个客户: A 只返回成本=2000 的订单;B返回2000和3000的订单;C 返回一个空的订单集合。
但以下将始终返回完整集合:
select c from Customer c, in(c.customerOrders) o where o.cost>1000
我怎么能在 JPQL 或特别是在 Hibernate 中做到这一点?