我有以下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,即原始查询返回的总行数。我觉得我错过了一些明显的东西。
连连呢?
答案 0 :(得分:6)
正如@ doc_180所评论的那样。使用getSingleResult()
将产生计数
使用以下代码获取结果。
// Assuming that the Query is strQ
Query q = entityManager.createQuery( strQ );
int count = ( (Integer) q.getSingleResult() ).intValue();