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