是否有可能在JPA/Hibernate中運行如下所示的查詢?如何在JPA/Hibernate中使用集合函數調用SQL查詢
select v.country,
v.site,
SUM(case when s.id = 1 then 1 else 0 end) as Total_SuspectedViolations,
SUM(case when s.id = 2 then 1 else 0 end) as Total_ConfirmedViolations,
SUM(case when s.id = 3 then 1 else 0 end) as Total_ConfirmedNoViolations,
SUM(case when s.id = 4 then 1 else 0 end) as Total_NotDetermined,
COUNT(*) Total
from violations v
inner join status s
on v.status_id = s.id
group by v.country, v.site
或
select v.country,
v.site,
SUM(case when v.status_id = 1 then 1 else 0 end) as Total_SuspectedViolations,
SUM(case when v.status_id = 2 then 1 else 0 end) as Total_ConfirmedViolations,
SUM(case when v.status_id = 3 then 1 else 0 end) as Total_ConfirmedNoViolations,
SUM(case when v.status_id = 4 then 1 else 0 end) as Total_NotDetermined,
COUNT(*) Total
from violations v
group by v.country, v.site
這個工程Oracle數據庫中,但是當我使用JPA/Hibernate的我越來越:
ERROR [PARSER] line 1:311: unexpected token: total
ERROR [PARSER] line 1:375: unexpected token: ON
我問,因爲我需要實現一些簡單的統計根據一個表中的數據「違規」
以下是我的想法:
我需要連接兩個表,並從第二個表計出現一些值來實現類似的統計數據表的效果,這將有列:
結果表:
- 國家VARCHAR(20),
- 站點VARCHAR(20),
- suspected_violation長,
- confirmed_violation長,
- confirmed_no_vio特徵研長,
- not_determined長,
- 總長
我的結果表需要有前兩列(contry與本站)來自第一表「違規」和未來5列將包含數字(計數)在來自狀態表的每個可能的id值中的「Violations」中發生的status_id。
所以,我有兩個表:違規和狀態。
違規:
- ID長,
- 國家VARCHAR(20),
- 網站VARCHAR(20),
- STATUS_ID長,< - 這是在狀態的狀態標識表。
- ...其他列在這種情況下
狀態並不重要:
- ID長,其分別對應的字符串值
- 狀態長 列「身份」具有值(1-4):涉嫌違反(1),確認衝突(2),確認無衝突(3)中,未測定(4)
在我的結果是加入具有表,該表應包含列:
- 從違規表:「國家」和「網站」
- 從狀態表:「涉嫌違反」,「確認衝突」,「確認不違規」,「未確定」,「總」(其中本列是違規表中出現的計數器)。
更新:據我所知現在沒有必要使用連接,查詢可以只在一個表上運行。
你能告訴我在JPA/Hibernate中做什麼的正確方法是什麼?
在JPA中,您可以使用createNativeQuery – Eelke 2013-03-11 20:25:53