例如,如果我们有一个表Books,我们如何计算hibernate的书记录总数?
答案 0 :(得分:308)
对于旧版本的Hibernate(< 5.2):
假设班级名称为Book:
return (Number) session.createCriteria("Book")
.setProjection(Projections.rowCount())
.uniqueResult();
至少是Number
,最有可能是Long
。
答案 1 :(得分:102)
在Java中,我通常需要返回int并使用以下形式:
int count = ((Long)getSession().createQuery("select count(*) from Book").uniqueResult()).intValue();
答案 2 :(得分:43)
以下是official hibernate docs tell我们对此的看法:
您可以在不返回查询结果的情况下计算查询结果的数量:
( (Integer) session.createQuery("select count(*) from ....").iterate().next() ).intValue()
但是,它并不总是返回Integer
个实例,因此最好使用java.lang.Number
来保证安全。
答案 3 :(得分:12)
您可以尝试count(*)
Integer count = (Integer) session.createQuery("select count(*) from Books").uniqueResult();
其中Books
是class
以外的名称 - 而不是数据库中的表。
答案 4 :(得分:6)
Long count = (Long) session.createQuery("select count(*) from Book").uniqueResult();
答案 5 :(得分:6)
如果您使用的是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();
答案 6 :(得分:1)
这适用于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();
}
答案 7 :(得分:1)
这非常简单,只需运行以下JPQL查询:
int count = (
(Number)
entityManager
.createQuery(
"select count(b) " +
"from Book b")
.getSingleResult()
).intValue();
我们强制转换为Number
的原因是某些数据库将返回Long
,而另一些数据库将返回BigInteger
,因此出于可移植性的考虑,最好将其转换为{{1} }并获得Number
或int
,具体取决于您希望计算多少行。