[英]distinct results and pagination with many-to-many relation
我有一個從提名到用戶的M-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到22”,而不是我指定的“ 1到25”-好像有22個提名但共有25個用戶。
我可以為此得到一些幫助嗎? 讓我知道是否需要澄清。
如果有的話,這是和我的問題最接近的問題: 如何在休眠狀態下檢索不同的根實體行數?
我用於此問題的解決方案是讓第一個查詢僅加載滿足條件的根實體的ID(即25個提名的ID),然后發出第二個查詢,以加載這25個ID的數據,通過執行如下查詢
select n from Nomination n
[... joins and fetches]
where n.id in (:ids)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.