2011-01-22 85 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();