mysql - 如何在hibernate中使用group by获取查询结果的总数?

标签 mysql oracle hibernate pagination group-by

假设这是我的模型:

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

这应该是结果:

enter image description here

实际上,如果我想获得总记录数,应该像这样执行查询:

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/

相关文章:

php - PHP/AJAx 实时搜索的最佳方法 - xml 还是 MySQL?

.net - 使用 Microsoft ODBC for Oracle 连接到 Oracle 10g 数据库

java - Spring 3.2 + Hibernate 4.3.4 + jUnit : EntityManagerFactory is closed

java - Spring MVC项目无法使用Hibernate

php - 使用PHP/MySQL可视化显示数据库信息

php - Mysql查询Sum with Case

mysql - 在mysql中获取最近6个月的记录

java - oraclepki.jar、osdt_cert.jar、osdt_core.jar在哪里下载?

Oracle - 在动态游标的 LIKE 子句中使用绑定(bind)变量

java - Hibernate + Spring + 持久一对一关系 + 空外键