Par exemple, si nous avons une table Livres, comment compterions-nous le nombre total d'enregistrements de livres avec mise en veille prolongée?
242
Pour les anciennes versions d'Hibernate (<5.2):
En supposant que le nom de la classe est Book:
return (Number) session.createCriteria("Book")
.setProjection(Projections.rowCount())
.uniqueResult();
C'est au moins un Number
, très probablement un Long
.
return (Number) session.createCriteria(Book.class).setProjection(Projections.rowCount()).uniqueResult();
En Java, je dois généralement retourner int et utiliser ce formulaire:
la source
Voici ce que les documents officiels d'hibernation nous disent à ce sujet:
Vous pouvez compter le nombre de résultats de requête sans les renvoyer:
Cependant, il ne retourne pas toujours l'
Integer
instance, il est donc préférable de l'utiliserjava.lang.Number
pour des raisons de sécurité.la source
org.hibernate.dialect.function.StandardAnsiSqlAggregationFunctions.CountFunction
( StandardBasicTypes.LONG )Tu pourrais essayer
count(*)
Où
Books
est le nom de laclass
- pas la table dans la base de données.la source
Si vous utilisez Hibernate 5+, la requête sera modifiée comme
Ou si vous avez besoin de TypedQuery
la source
la source
Cela fonctionne dans Hibernate 4 (testé).
Où getCurrentSession () est:
la source
C'est très simple, il suffit d'exécuter la requête JPQL suivante:
La raison pour laquelle nous effectuons la conversion
Number
est que certaines bases de données reviendrontLong
tandis que d'autres reviendrontBigInteger
, donc pour des raisons de portabilité, vous feriez mieux de convertir en unNumber
et d'obtenir unint
ou unlong
, selon le nombre de lignes que vous attendez.la source