JPA/JPQL COUNT个问题

NBW*_*NBW 3 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 
Run Code Online (Sandbox Code Playgroud)

它基本上返回组织在层次结构(树)中的文件的md5,这样如果相同的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 
Run Code Online (Sandbox Code Playgroud)

但是,这会返回100行,每行包含一个long,表示md5出现在分支中的次数.我想要的只是获得1行,其中长值为100,即原始查询返回的总行数.我觉得我错过了一些明显的东西.

建议?

Tal*_*han 6

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

使用以下代码获取结果.

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

  • 我不得不为了伯爵而投了很多钱.(长)q.getSingleResult().把它放在那里. (3认同)