【问题标题】:JPA count query with maximum results具有最大结果的 JPA 计数查询
【发布时间】:2017-03-06 12:07:36
【问题描述】:

您能否分享一下通过 JPA 编写的代码 sn-p 以生成以下 sql 查询

SELECT COUNT(*) FROM Customer c 
WHERE c.countryId ='Canada' AND 
      c.lanuguage ='ENG' AND 
      ROW_NUM <=10;

因为我尝试了以下方式。但是 MaxResults 似乎没有得到应用,因​​为我可以收到超过 10 个的计数。

Query query = em.createQuery("SELECT COUNT(c) FROM Customer c where c.countryId ='Canada' and c.lanuguage ='ENG'");
query.setMaxResults(10);
long customerCount = (Long)query.getSingleResult();

【问题讨论】:

  • 我不确定ROW_NUM 在这里应该代表什么。你有一个叫做行号的列吗?即使您的数据库支持这一点,它也不是 JPA 的一部分,并且无论如何都需要排序才能有意义。
  • 你可能只需要设置 limit = 10 吗?
  • 最大结果的设置仅影响您作为最终结果获得的行数。选择计数将始终只返回 1 行(包含已完成的计数)。因此,应用了最大结果,但没有影响,也不是您可以在这种情况下使用的结果。但是,像您目前所做的那样获取总计数并返回 10,如果它更高,这不是最简单的解决方案吗?
  • 您在 2 天前问了同样的问题。 stackoverflow.com/questions/42587842/…这没有帮助?

标签: java jpa


【解决方案1】:

按计数选择将始终返回单个值。如果您希望计数低于 10,请添加 HAVING。

SELECT COUNT(c) AS 
FROM Customer c
WHERE c.countryId='Canada' and c.language='END'
HAVING COUNT(c)<=10

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-18
  • 2020-06-17
  • 1970-01-01
  • 2012-09-08
  • 2019-02-11
  • 1970-01-01
相关资源
最近更新 更多