JPA / JPQL COUNT个问题

时间:2011-01-22 07:31:45

标签: count jpql

我有以下JPQL查询 -

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行,每行包含一个long,表示md5在分支中出现的次数。我想要的只是获得1行,其中长值为100,即原始查询返回的总行数。我觉得我错过了一些明显的东西。

连连呢?

1 个答案:

答案 0 :(得分:6)

正如@ doc_180所评论的那样。使用getSingleResult()将产生计数

使用以下代码获取结果。

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