2009-09-03 3 views

ответ

287

Предполагая, что имя класса является книга:

return (Number) session.createCriteria("Book").setProjection(Projections.rowCount()).uniqueResult(); 

Это по крайней мере Number, скорее всего, в Long.

+10

Он возвращает длинный. –

+9

Как @Salandur предлагает: «Это хотя бы номер», а тип номера имеет «intValue()», «longValue() ", поэтому мы можем легко получить желаемый примитивный тип, который нам нужен: ((Number) criteria.uniqueResult()). intValue() –

+0

Он возвращает тип 'Object'. – Lion

12

Вы можете попробовать count(*)

Integer count = (Integer) session.CreateQuery("select count(*) from Books").uniqueResult(); 

Где Books это имя от class - не таблица в базе данных.

+0

+1 для ответа я согласен. – KLE

+6

Выглядит подозрительно как .net для меня ... – skaffman

+0

извините, но его не работает с Java и Hibernate :( (Я заменил int целым, как и в Java для литья типов.) – craftsman

96

В Java я обычно нужно возвращать Int и использовать эту форму:

int count = ((Long)getSession().createQuery("select count(*) from Book").uniqueResult()).intValue(); 
+1

Принятый ответ на этот вопрос не сработал для меня, но ваш сделал. Благодаря! –

+0

- это самый быстрый и дешевый способ получить счетчик запросов? я имею в виду hibernate-wise – kommradHomer

+54

Какой смысл использовать ORM, если мы все равно закончим кодирование SQL? – thermz

40

Вот что official hibernate docs tell нам об этом:

Вы можете подсчитать количество результатов запроса, не возвращая их:

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

Однако, он не всегда возвращает экземпляр Integer, поэтому лучше использовать java.lang.Number для обеспечения безопасности.

+1

+1 для ответа, который дает рекомендуемый метод команды Hibernate. – Tom

+1

Это сработало для меня. – abbas

+3

Для меня это дало «java.lang.ClassCastException: java.lang.Long не может быть добавлено в java.lang.Integer», но приведение к длинному вместо этого работает ... – rogerdpack

6

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

+1

отлажены ваш ответ, чтобы добавить примечание о производительности – rajadilipkolli

+0

Должно быть '' 'Long count = (Long) session.createQuery (" select count (1) from Book "). uniqueResult();' '' это улучшит производительность – rajadilipkolli

6

Если вы используете Hibernate 5+, то запрос будет изменен

Long count = session.createQuery("select count(1) from Book") 
        .getSingleResult(); 

Или, если вам нужно TypedQuery

Long count = session.createQuery("select count(1) from Book",Long.class) 
         .getSingleResult(); 
Смежные вопросы