假设这是我的模特:
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中不起作用。
答案 0 :(得分:1)
你是对的,Hibernate - 以及JPA - 不允许FROM子句中的子查询。
您可以使用本机查询,它应该适用于大多数数据库,因为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
)