【问题标题】:How to count rows calculated by GROUP BY using Criteria Api如何使用 Criteria Api 计算由 GROUP BY 计算的行数
【发布时间】:2015-07-29 08:44:42
【问题描述】:

我想通过使用标准 API 来做到这一点:

select count(subQ.*)
from (  
    select *
    from items
    group by type
) subQ

我需要计算类型,而不是每种类型中的元素。 有可能吗?

【问题讨论】:

  • 如果你想对类型进行计数,为什么不简单地对它们使用计数查询。它与按查询分组有什么关系?你能举一些关于模拟数据的例子吗,你的目标是什么?
  • "Count types" 只是为了简洁起见的简单示例。在现实生活中,from(...) 子句中可以包含所有内容: select ... from ... group by A,B,C ... 这取决于用户输入。我需要向用户显示每页 25 个结果和总数。我不想这样做: em.createQuery(countCriteria(em, criteria)).getResultList().size(); - 大数据非常慢。

标签: hibernate jpa criteria-api


【解决方案1】:

使用带有计数方法的构建器。这是一些工作示例。

CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Long> cQuery = builder.createQuery(Long.class);
Root<Item> from = cQuery.from(Item.class);
CriteriaQuery<Long> select = cQuery.select(builder.count(from));

这类似于SQL方法

select count(*) from Item;

与简单查询一样,您可以在计数查询中添加一些谓词。

【讨论】:

  • 嗨!不,这不是我需要的。您计算组中的元素: - 飞机 10 - 汽车 5 - 船 6 我需要计算内部查询的组(行):以上示例中的 3 行
猜你喜欢
  • 2013-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-22
  • 1970-01-01
相关资源
最近更新 更多