java - Criteria API 使用复杂的 where 子句创建查询

标签 java jpa criteria criteria-api

有人可以建议我如何使用 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。例如,您的“服务”层组件可能想要查找一堆相关实体并与之交互,操作和保存状态。 JPQL/Criteria API/find() 更适合这种性质的用例。

如果您希望使用复杂查询(典型的报告和演示要求)提取数据,您可能需要考虑在 SQL 查询或 View 上使用 @Immutable 和 @Subselect。

关于java - Criteria API 使用复杂的 where 子句创建查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61775206/

相关文章:

c# - NHibernate.查询异常 : duplicate association path

JAVA GC OverheadLimit 错误

java - WireMock: stub - 无法正确实现 "AssertThat"方法

java - 有什么方法可以从实体获取字段而不实际加入该表?

hibernate - 如何在 hibernate 条件中编写insertinto命令

java - 如何在 Hibernate Criteria 中加入后获取行数?

java - 如何转换 java.util.Map<String, Object> 中的 google.protobuf.Struct 字段?

java - 我有一个 JSON 响应,但我一直坚持使用它

java - JPA - 具有一对多关系的实体不返回数据

java - JPA/Hibernate - 不需要的部分回滚和 session 处理