谁能建议我如何使用Criteria API来写这个查询,好吗?
SELECT CM.REL AS GROUP_ID, COUNT(DISTINCT C.ID) AS IDS_FOUND
FROM PROBLEMS C
INNER JOIN PROBLEMS.ITEM CM
ON C.ID = CM.PROBLEM_ID
WHERE (
CM.REL IS NOT NULL AND CM.REL = 'FF' AND C.ID NOT IN
(SELECT DISTINCT C.ID
FROM PROBLEMS C
INNER JOIN PROBLEMS.ITEM CM
ON C.ID = CM.PROBLEM_ID
WHERE CM.REL IS NOT NULL AND CM.REL = 'RR')
OR
(CM.REL IS NOT NULL AND CM.REL = 'RR')
)
GROUP BY CM.REL
JPQL和Criteria API最好限制在简单的CRUD上。例如,你的 "服务 "层组件可能想找到并与一堆相关实体交互,操作和保存状态。JPQLCriteria APIfind()更适合于这种性质的用例。
如果你想使用复杂的查询来提取数据(典型的报告和演示要求),你可能想考虑使用@Immutable和@Subselect来代替SQL查询或视图。