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' Integerinstance, il est donc préférable de l'utiliser java.lang.Numberpour 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ù Booksest 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 Numberest que certaines bases de données reviendront Longtandis que d'autres reviendront BigInteger, donc pour des raisons de portabilité, vous feriez mieux de convertir en un Numberet d'obtenir un intou un long, selon le nombre de lignes que vous attendez.