我正在尝试获取结果以及单个查询中的行数以进行分页。
这是我到目前为止得到的:
public List<User> getUsers(int page, int size, boolean somecondition) {
Criteria criteria = getSession().getCurrentSession().createCriteria(User.class);
ProjectionList projectionList = Projections.projectionList();
projectionList.add(Projections.property("name").as("name"));
projectionList.add(Projections.property("createdAt").as("createdAt"));
projectionList.add(Projections.property("id").as("id"));
projectionList.add(Projections.rowCount());
projectionList.add(Projections.groupProperty("id"));
criteria.setProjection(projectionList);
// pseudo Restrictions added
if (somecondition) {
criteria.add(Restrictions.isNotNull("email"));
}
if (somecondition) {
criteria.add(Restrictions.isNotNull("name"));
}
// Now here do something to get the row count without doing a second query
long count;
ScrollableResults scrollableResults = criteria.scroll();
scrollableResults.last();
count = scrollableResults.getRowNumber() + 1;
scrollableResults.close();
log.info("users count : {}", count);
criteria.setMaxResults(size);
criteria.setFirstResult(page);
criteria.setResultTransformer(new AliasToBeanResultTransformer(User.class));
List<User> users = criteria.list();
users.forEach(u -> log.info(u.toString()));
return users;
}
我read我可以使用 ScrollableResults 来获取行数而无需第二次查询,但这不起作用,我仍然在控制台中看到有 2 个查询。
我并不是要获取总结果,重要的是获取满足条件的结果的数量。
有什么建议吗?
最佳答案
这是我过去通过一次查询获取计数和结果的方式。
def result = Domain.createCriteria().list(max:10, offset:20){
//conditions
}
def count = result.totalCount
它给出了不受限制和偏移量影响的行总数。 希望对您有所帮助!
关于java - 创建条件语句,一次查询得到结果和行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41365130/