如何计算Hibernate查询语言中的行?

时间:2011-12-30 12:45:13

标签: java database hibernate hql

我试图获得返回的行数而不是表中的所有结果。

我看到这可以这样做:

( (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);

现在,如何在不使用list.size但直接从查询中使用Hibernate查询返回的所有行的计数?

4 个答案:

答案 0 :(得分:13)

您是否尝试过query.uniqueResult(); ?由于您的选择计数(*)只给您一个数字,您应该可以使用它来检索它,如int count =(Integer)query.uniqueResult();

要根据条件进行计数,您可以执行以下操作:

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

我现在正在使用Criteria,所以我肯定知道它有效。我在网站上看到了uniqueResult()解决方案:http://www.jroller.com/RickHigh/entry/hibernate_pagination_jsf_datagrid_prototype1

答案 1 :(得分:9)

你可以这样做

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

答案 2 :(得分:6)

试试吧。

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

答案 3 :(得分:3)

为我工作

int list=(int) 
sessionFactory.getCurrentSession().createSQLQuery("select count(*) as count from 
                         Book").addScalar("count",IntegerType.INSTANCE).uniqueResult();