我们如何使用Hibernate对行进行计数?

例如,如果我们有一个表Books,那么我们如何计算Hibernate的书logging总数呢?

假设类名是Book:

return (Number) session.createCriteria("Book").setProjection(Projections.rowCount()).uniqueResult(); 

它至less是一个Number ,最有可能是一个Long

在Java中,我通常需要返回int并使用这种forms:

 int count = ((Long)getSession().createQuery("select count(*) from Book").uniqueResult()).intValue(); 

以下是官方的hibernate文档告诉我们的这个:

您可以计算查询结果的数量而不返回它们:

 ( (Integer) session.createQuery("select count(*) from ....").iterate().next() ).intValue() 

但是,它并不总是返回Integer实例,因此为了安全起见,最好使用java.lang.Number

你可以尝试count(*)

 Integer count = (Integer) session.CreateQuery("select count(*) from Books").uniqueResult(); 

Booksclass的名字,而不是数据库中的表格。

Long count = (Long) session.createQuery("select count(*) from Book") .uniqueResult();

如果您使用的是Hibernate 5+,那么查询将被修改为

 Long count = session.createQuery("select count(1) from Book") .getSingleResult(); 

或者如果你需要TypedQuery

 Long count = session.createQuery("select count(1) from Book",Long.class) .getSingleResult();