我们如何使用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();
Books
是class
的名字,而不是数据库中的表格。
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();