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

Java 在Hibernate中计算查询结果中的行数,java,hibernate,Java,Hibernate,我面临以下问题: Criteria criteria = getSession().createCriteria(User.class); ProjectionList projectionList = Projections.projectionList(); projectionList.add(Projections.property("id")); projectionList.add(Projections.countDistinct("friend_

我面临以下问题:

    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);
这段代码返回了我需要的几个数据条目。但是,我需要它的行数。有没有一种干净的方法来做这件事,而不仅仅是做一个:

return criteria.list().size();

如果将此添加到投影列表的末尾,会怎么样

Projections.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();

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

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

return (Long) criteria.uniqueResult();

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

是的,很抱歉,我必须将查询更改为更接近我使用的内容,我确实检查了该答案,但它没有真正回答我的问题。查询中有countDistinct,使用普通计数会给我错误的条目数。很好,您找到了解决方案。最好发布并接受它作为您自己的答案。这种方法会覆盖投影列表,导致数据行计数不正确。请注意,在投影列表中有一个“count distinct”,它对用户进行分组,并统计他们分配了多少不同的好友id。我已经找到了问题的解决方案,我将用我的解决方案更新帖子。我没有尝试这个解决方案,因为我找到了一个更简单的方法。
Criteria criteria = getSession().createCriteria(User.class);
criteria.setProjection(Projections.countDistinct("id"));

return (Long) criteria.uniqueResult();