Как подсчитать строки в языке запросов 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);

теперь, как я могу получить количество всех строк, возвращаемых с помощью Hibernate-запроса в переменной без использования list.size но непосредственно из запроса?

3 ответов


вы пробовали запрос.uniqueResult ();? Поскольку ваш Select count (*) даст вам только одно число, вы сможете получить его с помощью такого запроса, как int count = (Integer).uniqueResult ();

рассчитывать на основе критериев, вы можете сделать это:

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

Я использую критерии прямо сейчас, поэтому я точно знаю, что это работает. Я видел решение uniqueResult () на веб-сайте здесь: http://www.jroller.com/RickHigh/entry/hibernate_pagination_jsf_datagrid_prototype1


вы можете сделать это

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

попробовать его.

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