Por exemplo, se tivermos uma tabela Livros, como contaríamos o número total de registros de livros com hibernação?
242
Para versões mais antigas do Hibernate (<5.2):
Supondo que o nome da classe seja Livro:
return (Number) session.createCriteria("Book")
.setProjection(Projections.rowCount())
.uniqueResult();
É pelo menos um Number
, provavelmente um Long
.
return (Number) session.createCriteria(Book.class).setProjection(Projections.rowCount()).uniqueResult();
Em Java, geralmente preciso retornar int e usar este formulário:
fonte
Aqui está o que os documentos oficiais do hibernate nos dizem sobre isso:
Você pode contar o número de resultados da consulta sem retorná-los:
No entanto, nem sempre ele retorna a
Integer
instância, portanto, é melhor usá-lojava.lang.Number
por segurança.fonte
org.hibernate.dialect.function.StandardAnsiSqlAggregationFunctions.CountFunction
( StandardBasicTypes.LONG )Você poderia tentar
count(*)
Onde
Books
está o nome fora daclass
- não a tabela no banco de dados.fonte
Se você estiver usando o Hibernate 5+, a consulta será modificada como
Ou se você precisar de TypedQuery
fonte
fonte
Isso funciona no Hibernate 4 (testado).
Onde getCurrentSession () é:
fonte
É muito fácil, basta executar a seguinte consulta JPQL:
A razão pela qual estamos lançando
Number
é que alguns bancos de dados retornamLong
enquanto outros retornamBigInteger
, portanto, para maior portabilidade, é melhor converter para aeNumber
obter umaint
ou along
, dependendo de quantas linhas você espera que sejam contadas.fonte