Например, если у нас есть таблица Books, как бы мы посчитали общее количество записей книги в режиме гибернации?
242
Для более старых версий Hibernate (<5.2):
Предполагая, что имя класса - Book:
return (Number) session.createCriteria("Book")
.setProjection(Projections.rowCount())
.uniqueResult();
Это как минимум a Number
, скорее всего a Long
.
return (Number) session.createCriteria(Book.class).setProjection(Projections.rowCount()).uniqueResult();
В Java мне обычно нужно вернуть int и использовать эту форму:
источник
Вот что официальные документы по гибернации говорят нам об этом:
Вы можете посчитать количество результатов запроса, не возвращая их:
Однако он не всегда возвращает
Integer
экземпляр, поэтому его лучше использоватьjava.lang.Number
для безопасности.источник
org.hibernate.dialect.function.StandardAnsiSqlAggregationFunctions.CountFunction
( StandardBasicTypes.LONG )Вы могли бы попробовать
count(*)
Где
Books
имя отclass
- не таблица в базе данных.источник
Если вы используете Hibernate 5+, запрос будет изменен как
Или если вам нужен TypedQuery
источник
источник
Это работает в Hibernate 4 (проверено).
Где getCurrentSession ():
источник
Это очень просто, просто запустите следующий запрос JPQL:
Причина, по которой мы приводим данные,
Number
заключается в том, что некоторые базы данных возвращаются,Long
а другие - возвращаютсяBigInteger
, поэтому для удобства переноса вам лучше привести к типу aNumber
и получить aint
или along
, в зависимости от того, сколько строк вы ожидаете подсчитать.источник