当前位置:  开发笔记 > 前端 > 正文

如何在JPA/JPQL中过滤集合?

如何解决《如何在JPA/JPQL中过滤集合?》经验,为你挑选了1个好方法。

我有两个实体:

@Entity
public class Customer  implements java.io.Serializable {
...
    @OneToMany(fetch=FetchType.EAGER, mappedBy="customer")
    private Set 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中做到这一点?



1> topchef..:

发布的查询相当于

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

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有