我试图获得返回的行数而不是表中的所有结果。
我看到这可以这样做:
( (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查询返回的所有行的计数?
答案 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();