0

「ノミニー」テーブルにマッピングされたノミネーションからユーザーへの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のユーザーがあるかのように.

これについて何か助けを得ることができますか?明確にする必要がある場合はお知らせください。

どちらかといえば、これは私の問題に最も近い質問です:休止状態で個別のルートエンティティの行数を取得する方法は?

4

1 に答える 1

0

この問題に対して私が使用する解決策は、基準を満たすルート エンティティの ID (つまり、25 の候補の ID) のみをロードする最初のクエリを用意し、次にこれら 25 の ID のデータをロードする 2 番目のクエリを発行することです。 、次のようなクエリを実行して

select n from Nomination n 
[... joins and fetches] 
where n.id in (:ids)
于 2012-05-23T17:08:39.377 に答える