Answers:
对于旧版本的Hibernate(<5.2):
假设类名是Book:
return (Number) session.createCriteria("Book")
.setProjection(Projections.rowCount())
.uniqueResult();
它至少是一个Number
,很可能是一个Long
。
return (Number) session.createCriteria(Book.class).setProjection(Projections.rowCount()).uniqueResult();
在Java中,我通常需要返回int并使用以下形式:
int count = ((Long)getSession().createQuery("select count(*) from Book").uniqueResult()).intValue();
这是官方休眠文档告诉的内容我们的内容:
您可以计算查询结果的数量而无需返回它们:
( (Integer) session.createQuery("select count(*) from ....").iterate().next() ).intValue()
但是,它并不总是返回Integer
实例,因此java.lang.Number
为安全起见最好使用。
org.hibernate.dialect.function.StandardAnsiSqlAggregationFunctions.CountFunction
(StandardBasicTypes.LONG)
你可以试试 count(*)
Integer count = (Integer) session.createQuery("select count(*) from Books").uniqueResult();
Books
的名称在哪里class
-不是数据库中的表。
Long count = (Long) session.createQuery("select count(*) from Book").uniqueResult();
这适用于Hibernate 4(已测试)。
String hql="select count(*) from Book";
Query query= getCurrentSession().createQuery(hql);
Long count=(Long) query.uniqueResult();
return count;
其中getCurrentSession()是:
@Autowired
private SessionFactory sessionFactory;
private Session getCurrentSession(){
return sessionFactory.getCurrentSession();
}
非常简单,只需运行以下JPQL查询:
int count = (
(Number)
entityManager
.createQuery(
"select count(b) " +
"from Book b")
.getSingleResult()
).intValue();
我们强制转换的原因Number
是某些数据库将返回Long
而另一些数据库将返回BigInteger
,因此出于可移植性的考虑,最好将其强制转换为a Number
并获取an int
或a long
,这取决于您希望计数的行数。