【问题标题】:Need help regarding HIbernate count query需要有关 HIbernate 计数查询的帮助
【发布时间】:2015-02-11 12:30:19
【问题描述】:

我们有一个用例来计数。实际查询返回的行数。我不知道如何使用休眠中的标准来获得它。 例如假设我想运行查询

select sum(TOTAL_EARNINGS) from table where column1 = 'value1' group by column2);

除了这个查询结果,我还想得到上面查询返回的总行数(上面的查询也可能有 rownum 限制,但对于总行数我必须忽略 rownum 限制)。

select count(*) from (select sum(TOTAL_EARNINGS) from table
                where column1 = 'value1' group by column2);

有没有什么简单的方法可以获取这些数据。我可以运行单独的查询来获取计数数据,但我不知道如何使用条件在休眠中编写它。我什至看不到子查询中可以使用的任何选项

【问题讨论】:

  • 无法从 java 端计算行数的特殊原因?还是使用 HQL?

标签: java hibernate


【解决方案1】:

一般情况下,您可以使用预测。 如果你有一个被 Hibernate 映射的实体“你的”,你可以这样做:

已编辑: 根据您的评论,您需要两个结果,一个总计数和一个按结果分组。

//the group by results...
List result1 = session.createCriteria("Your.class").setProjection(Projections.projectionList()
            .add(Projections.groupProperty("column2"))
            .add(Projections.sum("totalErnings"))
    ).list();

//the total count result
return (Integer) session.createCriteria("Your.class").add(Restrictions.eq("column1", val)).setProjection(Projections.rowCount()).uniqueResult();

【讨论】:

  • 我的查询也有一个分组条件。因此,如果我在您的代码中添加 groupBy column2,那么我将在 column2 值级别获得 count(*) 的结果。但我想要总结果数
  • 您好 Raul,我建议您分两步执行此操作...我将相应地更改我的代码
  • 查询 2 不会产生我想要的正确结果。基本上我在应用 group by 后不想要任何行。按条件分组和不按条件分组的行数不同
  • 呃抱歉我没听懂...所以你想要组数?你不能这样做 list1.size() 吗?所以你也可以使用返回的值?
  • 对于我的大部分查询,我将使用分页,所以我想运行 2 个单独的查询 1 来获取计数,然后运行第二个来选择分页结果。我将在两个查询中使用相同的 where 和 group by 子句
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多