2017-03-06 7 views
0

Können Sie mir bitte Code-Schnipsel teilen über JPA geschrieben werden, umJPA Zählung Abfrage mit maximalen Ergebnissen

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

die unterhalb SQL-Abfrage zu erzeugen, weil ich in der untenen Art und Weise versucht. Aber MaxResults nicht angewandt zu werden scheint es, als ich kann in der Lage die Zählung mehr als 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

Ich bin mir nicht sicher, was 'ROW_NUM' hier darstellen soll. Haben Sie eine Spalte namens Zeilennummer? Selbst wenn Ihre Datenbank dies unterstützt, ist sie nicht Teil von JPA und erfordert in jedem Fall eine Reihenfolge, um einen Sinn zu ergeben. –

+0

müssen Sie nur Limit = 10 setzen? – rvit34

+0

Die Einstellung der maximalen Ergebnisse wirkt sich nur auf die Anzahl der Zeilen aus, die Sie als Endergebnis erhalten. Eine Auswahlzählung gibt immer nur eine Zeile zurück (mit der Anzahl, die ausgeführt wurde). Die maximalen Ergebnisse werden also angewendet, haben aber keine Auswirkungen und können nicht für diesen Fall verwendet werden. Aber wäre es nicht die einfachste Lösung, um die Gesamtzählung zu erhalten, wie Sie es derzeit tun, und 10 zurückzugeben, wenn sie höher ist? –

Antwort

0

Select auf Zählung empfangen immer einen einzelnen Wert zurückgeben. Wenn Sie einen Wert unter 10 haben möchten, fügen Sie HAVING hinzu.

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

Was ist das Ergebnis, wenn die Zeilenanzahl größer als 10 ist? –

+0

Wenn Sie .getSingleResult() verwenden, wird eine NoResultException ausgelöst. Siehe http://docs.oracle.com/javaee/7/api/javax/persistence/Query.html#getSingleResult-- – Namoz