简体   繁体   English

条件 API 创建带有复杂 where 子句的查询

[英]Criteria API create query with complex where clause

Could someone suggest me how to write this query using the Criteria API, please?有人可以建议我如何使用标准 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 and Criteria API are better restricted to simple CRUDs. JPQL 和 Criteria API 更好地限制在简单的 CRUD 上。 For instance, your 'Service' layer component may want to find and interact with a bunch of related entities, manipulate and save state.例如,您的“服务”层组件可能想要查找并与一堆相关实体交互,操作并保存 state。 JPQL/Criteria API/find() are better suited for usecases of that nature. JPQL/Criteria API/find() 更适合这种性质的用例。

If you are looking to extract data using complex queries (typical of reporting and presentation requirements), you may want to look into using @Immutable and @Subselect over SQL query or view.如果您希望使用复杂查询(典型的报告和演示要求)提取数据,您可能需要考虑使用 @Immutable 和 @Subselect 而不是 SQL 查询或视图。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM