2017-03-06 68 views
0

JPA數查詢能否請你分享我的代碼片段通過JPA以產生以下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(); 
+0

我不確定'ROW_NUM'在這裏應該代表什麼。你有一個叫做行號的列嗎?即使你的數據庫支持這一點,它也不是JPA的一部分,無論如何都需要一個命令來做出任何意義。 –

+0

可能你只需要設置限制= 10? – rvit34

+0

最大結果的設置僅影響作爲最終結果獲得的行數。選擇計數將通常只返回1行(包含已完成的計數)。所以最大的結果是適用的,但沒有影響,而不是你可以用於這種情況。但是,要獲得像你現在這樣的總數,最簡單的解決方案不是最簡單的解決方案,如果它更高,則返回10? –

回答

0

選擇計數將始終返回單個值。如果你想要一個低於10的計數,請添加HAVING。

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

當行計數大於10時,結果如何。 –

+0

當您使用.getSingleResult()時,將引發NoResultException。請參閱http://docs.oracle.com/javaee/7/api/javax/persistence/Query.html#getSingleResult-- – Namoz