假设这是我的模型:
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
这应该是结果:
实际上,如果我想获得总记录数,应该像这样执行查询:
select count(*)
from (
select count(*)
from UserActions t
group by t.username, t.actionType)
但是如你所知,上面的查询无法执行,因为hibernate 不支持from
子句中的子查询。
更新
我很困惑 我找到了一个使用 group by 子句计算总计数的查询:
select sum(count(*) - count(*) + 1)
from UserActions a
group by a.username, a.actionType
它在 oracle 中正常工作,但在 postgres 和 MySql 中不起作用。
最佳答案
你是对的,Hibernate——还有 JPA——不允许在 FROM 子句中使用子查询。
您可以使用 native 查询,它应该适用于大多数数据库,因为 from 子句中的子查询是基本的 SQL 结构:
@NativeNamedQuery(
name = "some.name"
query = "SELECT count(*) FROM ( SELECT DISTINCT username, actionType FROM UserActions )"
)
<强>------------
编辑
----------
经过一番思考后,我设法让它在 Hibernate 中工作,MAX
函数可以解决问题,请尝试这个查询:
SELECT count(*) from UserActions
WHERE id IN (
SELECT max( id )
FROM UserActions
GROUP BY username, actionType
)
关于mysql - 如何在hibernate中使用group by获取查询结果的总数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40692140/