2011-01-22 10 views
3

I以下のJPQLクエリ持っている - それは、基本的には、このような階層(ツリー)で編成されたファイルのmd5sを返し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 

を同じMD5はもっとして1つのリーフに表示されている場合階層の特定の枝では、一度しか表示されません(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行戻すということでした。私は何かが明らかに欠けているように感じる。

提案? @ doc_180として

+1

Hmmm .. getResultListの代わりにquery.getSingleResultを実行して、結果を数値にキャストしましたか? –

+0

提案:コードブロック内にコード(またはこの場合はクエリ)を配置してください。 (コードを強調表示して、Macユーザーの場合はctrl + kまたは^ kを押してください) –

答えて

6

はコメントしています。 getSingleResult()を使用すると、カウント

が結果を取得するには、次のコードを使用して得られます。

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

カウントのためにLongにキャストしなければなりませんでした。 (Long)q.getSingleResult()。ちょうどそれをそこに置く。 – djb