在Hibernate中计算查询结果中的行

时间:2014-07-17 10:10:12

标签: java hibernate

我遇到以下问题:

    Criteria criteria = getSession().createCriteria(User.class);

    ProjectionList projectionList = Projections.projectionList();
    projectionList.add(Projections.property("id"));
    projectionList.add(Projections.countDistinct("friend_id"));
    projectionList.add(Projections.property("registrationDate"));
    projectionList.add(Projections.property("lastLoginDate"));

    criteria.setProjection(projectionList);

这段代码返回了一些带有我需要的数据的条目。但是,我需要rowcount。有没有一种干净的方式来做到这一点,而不仅仅是做:

return criteria.list().size();

3 个答案:

答案 0 :(得分:0)

Criteria criteria = session.createCriteria(Track.class)
                    .setProjection(Projections.rowCount());

            List result = criteria.list();
            if (!result.isEmpty()) {
                Integer rowCount = (Integer) result.get(0);
                System.out.println("Total records: " + rowCount);

答案 1 :(得分:0)

如果将其添加到ProjectionList的末尾怎么办?

Projections.rowCount()

我使用以下代码搜索某些内容,然后为其获取rowcount。

Criteria criteria = session.createCriteria(LogEntryOracle.class);
if (search != null && !search.isEmpty()) {
    criteria.add(Restrictions.ilike("xml", search, MatchMode.ANYWHERE));
}

criteria.setProjection(Projections.rowCount());
return (Number) criteria.uniqueResult();

答案 2 :(得分:0)

似乎我的问题是由于缺乏分析造成的:

Criteria criteria = getSession().createCriteria(User.class);
criteria.setProjection(Projections.countDistinct("id"));

return (Long) criteria.uniqueResult();

由于我们已经按用户ID进行分组,因此我所要做的就是找到与搜索条件匹配的唯一用户ID的金额。