2011-01-22 84 views
3

我有以下JPQL查詢 -JPA/JPQL COUNT問題

SELECT f.md5 
FROM File f, Collection leafCollections, Collection instCollections 
WHERE (f.status = com.foo.bar.FileStatus.Happy OR f.status = com.foo.bar.FileStatus.Sad) 
     AND f.collectionId = leafCollections.collectionId 
     AND leafCollections.instanceCollectionId = instCollections.collectionId 
GROUP BY f.md5, instCollections.collectionId 

它基本上返回文件,這是在一個層次結構(樹)舉辦這樣的md5s,如果同一個MD5出現在一個以上的葉在層次結構的特定分支中,它只會顯示一次(感謝GROUP BY)。

這工作正常。比方說,我得到100行。每行包含一個md5作爲字符串。

現在我想獲得返回的行的COUNT。我以爲我可以簡單地做:

SELECT COUNT(f.md5) 
FROM File f, Collection leafCollections, Collection instCollections 
WHERE (f.status = com.foo.bar.FileStatus.Happy OR f.status = com.foo.bar.FileStatus.Sad) 
     AND f.collectionId = leafCollections.collectionId 
     AND leafCollections.instanceCollectionId = instCollections.collectionId 
GROUP BY f.md5, instCollections.collectionId 

但是這將返回100行,每一個都包含MD5出現了分支的次長代表的數量。我想要的僅僅是獲得1行,長整型值爲100,即原始查詢返回的總行數。我覺得我失去了一些明顯的東西。

對此提出建議?

+1

嗯..你做query.getSingleResult代替getResultList(和把結果以數字)。? – 2011-01-22 07:53:38

+0

建議:請將代碼(或本例中的查詢)放在代碼塊中。 (突出顯示代碼,然後按ctrl + k或^ k爲mac用戶) – 2011-01-22 07:54:11

回答

6

由於@ doc_180已評論。使用getSingleResult()將產生計數

使用以下代碼獲取結果。

// Assuming that the Query is strQ 
Query q = entityManager.createQuery(strQ); 
int count = ((Integer) q.getSingleResult()).intValue();