【发布时间】:2016-04-25 11:07:53
【问题描述】:
假设我有 3 张桌子
STUDENT
----------------------
STUDENT_ID | FULL_NAME
======================
SUBJECT
-----------------------------------------------------------------------
SUBJECT_ID | SUBJECT_NAME | STATUS | START_DATE | END_DATE | STUDENT_ID
=======================================================================
CLAZZ
-------------------------------------------
CLAZZ_ID | CLAZZ_NAME | STATUS | STUDENT_ID
===========================================
我想获取学生在一段时间内学习的科目和课程的数量。所以我可以使用这个原生 SQL:
WITH SUBJECT_COUNT AS (
SELECT STUDENT_ID, COUNT(*) AS SUB_COUNT
FROM SUBJECT
WHERE STATUS=1 AND DateParam >= START_DATE AND DateParam <= END_DATE
GROUP BY STUDENT_ID
), CLAZZ_COUNT AS (
SELECT STUDENT_ID, COUNT(*) AS CLZ_COUNT
FROM CLAZZ
WHERE STATUS=1
GROUP BY STUDENT_ID
)
SELECT S.STUDENT_ID, S.FULL_NAME, SC.SUB_COUNT, CC.CLZ_COUNT
FROM STUDENT S
LEFT JOIN SUBJECT_COUNT SC ON S.STUDENT_ID=SC.STUDENT_ID
LEFT JOIN CLAZZ_COUNT CC ON S.STUDENT_ID=CC.STUDENT_ID
ORDER BY SC.SUB_COUNT, CC.CLZ_COUNT
如何将此原生 SQL 转换为 JPA 2.1 SQL。或者我可以获得相同结果的任何其他解决方案都会很好。 非常感谢
【问题讨论】:
-
为什么不能使用
NativeQuery? -
我的项目几乎使用了 JPA 查询。它使用一种技术来映射数据和 POJO 对象。我不想用其他方式