休止状態からの一連の結果にページネーションを実装しています。現在、私はやっています
long count = getCountResultForNamedQuery();
List result = getResultForNamedQuery()
2つのクエリは次のようなものです
select count(*) from addresses where country = 'USA';
と
select * from addresses where country = 'USA';
ページネーションのために、私は通常 getResultForQuery を更新して、.setFirstResult と setMaxResult が設定されるようにします。これにより、必要なセクションのみが返されます。ページのページネーション部分に表示するページ数を知るために、カウントを行う必要があります。
もっと効率よくできないかと考えていました。私はちょうどすることができます
List result = getResultForQuery();
int count = result.size();
List subResult = result.subList(start, end);
これは理にかなっていますか?可能であれば、1 つのクエリのみを呼び出そうとしています。問題は、休止状態がどれほど賢いかということです。size を呼び出すと、返されるオブジェクト シェルがカウントされますか、それともすべてを解決してからデータベースにヒットしますか? 使用するのに適したパターンはどれですか?
例が十分に明確でない場合はお詫び申し上げます。できるだけ単純化しようとしましたが、単純化しすぎた可能性があります。
前もって感謝します!