Réponses:
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:
int count = ((Long)getSession().createQuery("select count(*) from Book").uniqueResult()).intValue();
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:
( (Integer) session.createQuery("select count(*) from ....").iterate().next() ).intValue()
Cependant, il ne retourne pas toujours l' Integer
instance, il est donc préférable de l'utiliser java.lang.Number
pour des raisons de sécurité.
org.hibernate.dialect.function.StandardAnsiSqlAggregationFunctions.CountFunction
( StandardBasicTypes.LONG )
Tu pourrais essayer count(*)
Integer count = (Integer) session.createQuery("select count(*) from Books").uniqueResult();
Où Books
est le nom de la class
- pas la table dans la base de données.
Si vous utilisez Hibernate 5+, la requête sera modifiée comme
Long count = session.createQuery("select count(1) from Book")
.getSingleResult();
Ou si vous avez besoin de TypedQuery
Long count = session.createQuery("select count(1) from Book",Long.class)
.getSingleResult();
Long count = (Long) session.createQuery("select count(*) from Book").uniqueResult();
Cela fonctionne dans Hibernate 4 (testé).
String hql="select count(*) from Book";
Query query= getCurrentSession().createQuery(hql);
Long count=(Long) query.uniqueResult();
return count;
Où getCurrentSession () est:
@Autowired
private SessionFactory sessionFactory;
private Session getCurrentSession(){
return sessionFactory.getCurrentSession();
}
C'est très simple, il suffit d'exécuter la requête JPQL suivante:
int count = (
(Number)
entityManager
.createQuery(
"select count(b) " +
"from Book b")
.getSingleResult()
).intValue();
La raison pour laquelle nous effectuons la conversion Number
est que certaines bases de données reviendront Long
tandis que d'autres reviendront BigInteger
, donc pour des raisons de portabilité, vous feriez mieux de convertir en un Number
et d'obtenir un int
ou un long
, selon le nombre de lignes que vous attendez.