java - 如何使用 JPA 编写复杂的连接查询

标签 java jpa jpql

如何使用 JPA 编写这种复杂的连接查询,我在下面指出的一些语法不适用于 JPA。我已经使用它们来演示应该构建 sql 查询的方式,对此深表歉意。

SELECT Result1.name1, Result1.count1, Result2.name2, Result2.count2 FROM (
    SELECT 
        taskOne.user.name AS name1,
        COUNT(taskOne.taskId) AS count1
    FROM
        Task AS taskOne
    INNER JOIN
        taskOne.defect AS defectOne
    WHERE (
        defectOne.defId = taskOne.defect.defId
        AND
        taskOne.taskCategory.tcaId = 1
    )
    GROUP BY
        taskOne.user.usId
) AS Result1
FULL JOIN (
    SELECT
        taskTwo.user.name AS name2,
        COUNT(taskTwo.taskId) AS count2
    FROM Task AS taskTwo
    INNER JOIN taskTwo.defect AS defectTwo
    WHERE (
        defectTwo.defId = taskTwo.defect.defId
        AND
        taskTwo.taskCategory.tcaId = 2
    )
    GROUP BY taskTwo.user.usId
)
AS Result12
WHERE Result1.name1 = Result12.name2

最佳答案

选择对象需要 JPQL。您的查询似乎非常复杂,我建议使用 native SQL 查询或对其进行简化。

JPQL 不支持 from 子句中的子选择。

关于java - 如何使用 JPA 编写复杂的连接查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6992004/

相关文章:

java - 从字符串中删除字符: Regular expression or Manually

java - JPA - 返回 StartDate 之后和 EndDate 之前的实体

java - 使用 In Query 在 JPA 中的参数中添加 2 个列表

java - 如何通过某些属性从多对一关系获取对象

java - 无法延迟初始化角色集合。简单的 JPA findById

java - JPA:从另一个表加载值列表

spring - 使用 @ElementCollection 的查询的 DTO 投影导致 'Unable to locate appropriate constructor on class' 错误

java - 通过进程ID获取JVM的内存详情

java - 从存储库解析插件 'spring:boot' 的版本时出错

java - java串口异常