jsc*_*oot 6 hibernate 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;
...
Run Code Online (Sandbox Code Playgroud)
现在在我的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
Run Code Online (Sandbox Code Playgroud)
我怎么能在JPQL或Hibernate中做到这一点?
发布的查询相当于
select c from Customer c inner join c.customerOrders o where o.cost > 1000
Run Code Online (Sandbox Code Playgroud)
它只返回至少有一个成本大于1000的订单的所有客户.
我建议反向连接并选择顺序 - 它在语义上是相同的,但在结构上与你想要的结果不同:
select o from CustomerOrder o where o.cost > 1000
Run Code Online (Sandbox Code Playgroud)
现在,Hibernate具有名为Filter的非JPA功能,可以完全满足您的需求 - 请参阅此处:http: //www.hibernate.org/hib_docs/reference/en/html/filters.html
| 归档时间: |
|
| 查看次数: |
17428 次 |
| 最近记录: |