【发布时间】:2020-10-22 12:01:28
【问题描述】:
我有 2 个实体:
@Entity
class Order {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Set<Contract> contracts= new HashSet<>();
}
和
@Entity
class Contract {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private Integer numberOfClaims;
}
现在我想建立一个javax.persistence.criteria.Predicate 来查找所有numberOfClaims 大于x 的订单。
【问题讨论】:
-
到目前为止你尝试了什么?
-
我不记得我尝试过的所有代码,但这里是我想到的一般想法:a) select * from order o where sum(o.contracts.numberOfClaims) > x b) Some使用“have”而不是“where”的查询,但我没有成功使用这种方法 c)使用子选择
-
我使用休眠来创建我的数据库表。它为我的 2 个实体创建了一个匹配表“order_contract”。我可以使用此选择
SELECT * FROM order o WHERE ( ( SELECT SUM(numberOfClaims) FROM order_contract oc LEFT JOIN contract c ON c.id = oc.contract_id WHERE o.id=oc.order_id ) >= :x)来获得正确的结果,但我不知道如何使用 jpa 构建此选择
标签: java hibernate jpa spring-data-jpa jpql