2011-12-30 28 views
7

我想获取返回的行数而不是表中的所有结果。如何计算Hibernate查询语言中的行数?

我看到这个可以这样做:

((Integer) session.createQuery("select count(*) from ....").iterate().next()).intValue() 

但是,试图将存储在一个整数格式(它说不能从Query to Integer转换)这个查询

当我使用的是动态查询其中的值会提到下面的查询这样

theQuery = "select count(*) from THM as thm " + 
       "join thm.TMC as tmc " + 
       "join tmc.TIMCC as timcc " + 
       "where thm.Qid = :Qid and thm.Cv = :Cv and timcc.Did = :Did and timcc.Cv= :Cv"; 

Query query = session.createQuery(theQuery); 
query.setInteger("Qid", Integer.parseInt(Qid)); 
query.setInteger("Did", Did); 
query.setInteger("Cv",cV); 

现在,我怎样才能通过在VA使用Hibernate查询返回的所有行数riable没有使用list.size但直接从查询?

回答

13

你试过了query.uniqueResult(); ?由于你的选择计数(*)只会给你一个数字,所以你应该可以用int count =(Integer)query.uniqueResult()来检索它。

来算基于一个标准,你可以这样做:

Criteria criteria = currentSession().createCriteria(type); 
criteria.setProjection(Projections.rowCount()); 
criteria.uniqueResult(); 

我使用的是标准,现在,所以我肯定知道,它的作品。我看到了一个网站,在这里的uniqueResult()解决方案:http://www.jroller.com/RickHigh/entry/hibernate_pagination_jsf_datagrid_prototype1

+0

query.uniqueResult(); ()。next()).intValue() – user1002782 2012-01-05 13:21:54

+0

如果我的查询不是Select count(*),而是像“from THM”开始的那样, – Jerry 2017-05-10 06:44:09

7

你可以做到这一点

long count = (long)session.createQuery("SELECT COUNT(e) FROM Employees e").getSingleResult(); 
6

试试吧。

Long count = ((Long) session.createQuery("select count(*) from Book").uniqueResult()); 
Integer totalBooks = count.intValue();