如何通过hibernate获得群组查询结果的总数?

问题描述:

认为是我的模型:如何通过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

你是对的,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