2011-08-09 47 views
1

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

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 

回答

2

JPQL是选择对象的理想选择。你的查询看起来非常复杂,我会推荐一个原生的SQL查询,或者简化它。

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

+0

嗨,詹姆斯!非常感谢反馈,是的,目前我使用本机查询为“entityManager.createNativeQuery(”sqlQuery“)”。玩得开心! – Channa