如何通过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
这是查询结果:
现在如果我执行此查询以获得总记录数:
select count(*)
from UserActions t
group by t.username, t.actionType
这shoulde是结果:
实际上,如果我想获得总记录数,是应该这样执行查询:
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的。
你是对的,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
)
请检查我的更新! –
@Rasool Ghafari我已经用工作HQL查询更新了我的答案,请试试看 – krokodilko
休眠支持statament? –
你是否指'带'条款?不支持。 –
如果你想获得总数,为什么不运行简单的'SELECT count(*)FROM UserActions t'?我不明白你的问题。 – krokodilko