我有一个从 Nomination 到 User 的 M 对 M 关系映射在“Nominee”表上。我有以下方法将结果封装在一个名为“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 个用户。
我能得到一些帮助吗?让我知道是否需要澄清。
如果有的话,这是与我的问题最接近的问题:如何在休眠中检索不同的根实体行数?