gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 23:52:29 26 4
gpt4 key购买 nike

我有两个实体:

@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 有 3 个订单,成本分别为 2000、3000 和 500。 C 有一份订单,成本=500。现在我想获得三个客户:A只返回cost=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

关于hibernate - 如何在JPA/JPQL中过滤集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/675979/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com