0
我有一个M-to-M关系从提名到用户映射到“代名人”表上。我有以下方法来将结果封装在名为“ResultPage”的分页类中:不同的结果和分页与多对多关系
protected ResultPage<T> findPageByCriteria(Criteria criteria, int page,
int pageSize) {
DataVerify.notNull(criteria);
DataVerify.greaterThan(page, 0, "Invalid page number");
DataVerify.isTrue(pageSize >= 0, "Invalid page size");
if (logger.isDebugEnabled()) {
logger.debug("Arguments: ");
logger.debug("Page: " + page);
logger.debug("Page size: " + pageSize);
}
int totalItems = 0;
List<T> results = null;
if (pageSize != 0) {
totalItems = ((Number) criteria.setProjection(Projections.rowCount()).
uniqueResult()).intValue();
criteria.setProjection(null);
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
criteria.addOrder(Order.desc("id"));
results = criteria.setFirstResult((page-1) * pageSize).
setMaxResults(pageSize).list();
} else {
results = criteria.setFirstResult((page-1) * pageSize).
list();
totalItems = results.size();
}
ResultPage<T> resultsPage = new ResultPage<T>(results, page,
totalItems,
(pageSize != 0) ? pageSize :
totalItems);
if (logger.isDebugEnabled()){
logger.debug("Total Results: " + resultsPage.getTotalItems());
}
return resultsPage;
}
现在抓取工作正确完成。但是我的结果数量并不一致。这当然只有当“提名”有超过1个用户分配给它时才会发生。然后它计算用户而不是根实体,因此我得到的每页总数为“1到22”,而不像我指定的那样是“1到25” - 好像有22个提名但总共25个用户。
我能为此得到一些帮助吗?如果我需要澄清,请告诉我。
如果有的话这件事是因为最近我的问题的问题:how to retrieve distinct root entity row count in hibernate?
子查询是最接受的解决方案,我的疑问是第二查询有点复杂,所以我想我会看到我可以更好地进行子查询。 – Nimchip