2016-11-19 105 views
2

認爲是我的模型:如何通過hibernate獲得羣組查詢結果的總數?

public class UserActions { 
    private int id; 
    private String username; 
    private String actionType; 

    // setter and getters here 
} 

現在我想執行這個下面的查詢,並顯示在表中的結果與分頁:

select t.username, t.actionType 
    from UserActions t 
group by t.username, t.actionType 

這是查詢結果:

enter image description here

現在如果我執行此查詢以獲得總記錄數:

select count(*) 
    from UserActions t 
group by t.username, t.actionType 

這shoulde是結果:

enter image description here

實際上,如果我想獲得總記錄數,是應該這樣執行查詢:

select count(*) 
from (
select count(*) 
from UserActions t 
group by t.username, t.actionType) 

,但你也知道上面的查詢無法執行,因爲hibernate不支持from子句中的子查詢。

UPDATE

我很困惑 我發現,通過節計算與組總數的查詢:

select sum(count(*) - count(*) + 1) 
    from UserActions a 
group by a.username, a.actionType 

,它工作正常在Oracle但在Postgres沒有工作, MySQL的。

+0

休眠支持statament? –

+0

你是否指'帶'條款?不支持。 –

+1

如果你想獲得總數,爲什麼不運行簡單的'SELECT count(*)FROM UserActions t'?我不明白你的問題。 – krokodilko

回答

1

你是對的,Hibernate - 也是JPA--不允許FROM子句中的子查詢。

您可以使用本機查詢,它應該在大多數數據庫工作,因爲FROM子句中的子查詢是一個基本的SQL構造:

@NativeNamedQuery(
    name = "some.name" 
    query = "SELECT count(*) FROM (SELECT DISTINCT username, actionType FROM UserActions)" 
) 


-------- - 編輯 ----------


經過一番思考,我設法得到它在休眠工作,MAX功能的伎倆,PL輕鬆嘗試此查詢:

SELECT count(*) from UserActions 
WHERE id IN ( 
    SELECT max(id) 
    FROM UserActions 
    GROUP BY username, actionType 
) 
+0

請檢查我的更新! –

+0

@Rasool Ghafari我已經用工作HQL查詢更新了我的答案,請試試看 – krokodilko