我使用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
还有其他最好的方法吗?
谢谢你
答案 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();