我有两个实体:
@Entity public class Customer implements java.io.Serializable { ... @OneToMany(fetch=FetchType.EAGER, mappedBy="customer") private SetcustomerOrders; ... @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中做到这一点?
发布的查询相当于
select c from Customer c inner join c.customerOrders o where o.cost > 1000
它只返回至少有一个成本大于1000的订单的所有客户.
我建议反向连接并选择顺序 - 它在语义上是相同的,但在结构上与你想要的结果不同:
select o from CustomerOrder o where o.cost > 1000
现在,Hibernate具有名为Filter的非JPA功能,可以完全满足您的需求 - 请参阅此处:http: //www.hibernate.org/hib_docs/reference/en/html/filters.html