通过设置JPA中的最大结果来从表中获取记录数

时间:2017-03-03 20:24:16

标签: java spring hibernate jpa

我使用JPA通过设置最大结果(10)来从表Customer中获取记录数。

期望是,
    1.仅接收10作为计数如果查询返回的计数大于10     2.如果计数等于或小于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();

但我没有按预期得到结果。当查询结果为100(我的意思是超过10)时,我可以看到查询返回100。

任何人都可以告诉我如果我的方法有问题吗?
OR
在单个查询中是否无法实现此目的? OR
还有其他最好的方法吗?

谢谢你

1 个答案:

答案 0 :(得分:0)

您获得 COUNT ,为什么要使用最高结果?

您的结果将始终是单个结果,因为它将是多个客户COUNT?

如果您想获得总计数

,您的代码应该是下一个
Query query = em.createQuery("SELECT COUNT(c) FROM Customer c WHERE c.countryId ='Canada' AND c.lanuguage ='ENG'");
long customerCount = (Long)query.getSingleResult();

更新

  

AND如果你只是想得到10作为最大总数,如果COUNT结果比   10否则你将得到真正的COUNT结果,所以请尝试下一步

Query query = em.createQuery("SELECT CASE WHEN COUNT(c) > 10 THEN 10 ELSE COUNT(c) END FROM Customer c WHERE c.countryId ='Canada' AND c.lanuguage ='ENG'");
int customerCount = (Integer)query.getSingleResult();
     

或者,如果您需要登录类型,则可以将 l 添加到数字,例如10l,如下一个查询中所示(注意:,在下一个查询 10l < / strong>不是 101 ,但是长类型为10)

Query query = em.createQuery("SELECT CASE WHEN COUNT(c) > 10l THEN 10l ELSE COUNT(c) END FROM Customer c WHERE c.countryId ='Canada' AND c.lanuguage ='ENG'");
long customerCount = (Long)query.getSingleResult();

无论如何,如果你想获得客户ID列表,你可以使用最大结果(假设客户的id属性为Integer)

Query query = em.createQuery("SELECT c.id FROM Customer c WHERE c.countryId ='Canada' AND c.lanuguage ='ENG'");
query.setMaxResults(10);
List<Integer> customersIds = query.getResultList();