我们如何使用旧版本的Hibernate计算行数(~2009)?

时间:2009-09-03 09:07:59

标签: java hibernate count

例如,如果我们有一个表Books,我们如何计算hibernate的书记录总数?

8 个答案:

答案 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();

其中Booksclass以外的名称 - 而不是数据库中的表。

答案 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} }并获得Numberint,具体取决于您希望计算多少行。