【发布时间】:2021-02-06 00:26:46
【问题描述】:
我使用Specifications 使用CriteriaBuilder 过滤从我的JpaRepository 使用findAll() 调用的数据,但现在我在SQL 中有一个更复杂的查询,我需要在其中生成一个Predicate我的规范。
SQL 查询是:
SELECT a.*
FROM A a
LEFT JOIN (SELECT e.a_id, sum(e.amount) AS matched_total
FROM E e
GROUP BY e.a_id
HAVING e.a_id IS NOT NULL) AS sub ON sub.a_id = a.id
WHERE coalesce(matched_total, 0) = a.amount;
实体 E 链接到 A:
+--------+
| id |
| amount |
| a_id |
+--------+
实体 A:
+--------+
| id |
| amount |
+--------+
(或者也许有一种方法可以将其编写为 HQL 并以某种方式使用它来构建Predicate?)
补充说明:
- E 和 A 之间存在一对多的关系,因此 A 中的多行可以与 E 中的单行相关联。
- E 中的
a_id也可以为空,因此 A 中的某些行可能与 E 中的行无关 - 我们需要忽略这些。 - 最终,我们希望找到 A 中与 E 中的单个行相关联的所有行,但仅在 A 中的行的
amounts 与 E 中的单个amount行相加时 - 这就是为什么我们计算matched_total。
【问题讨论】:
标签: sql hibernate jpa hibernate-criteria criteriaquery