「ノミニー」テーブルにマッピングされたノミネーションからユーザーへの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から25」ではなく、ページごとに「1から22」の合計が得られます.22の指名があるが合計25のユーザーがあるかのように.
これについて何か助けを得ることができますか?明確にする必要がある場合はお知らせください。
どちらかといえば、これは私の問題に最も近い質問です:休止状態で個別のルートエンティティの行数を取得する方法は?