Hibernateで長いクエリ結果を処理する方法はありますか?何百万ものレコードを含むテーブルを描画し、ユーザーがその上を移動できるようにするにはどうすればよいですか?
目標は、その時点ですべてのデータをクライアントに転送して現在の位置を処理することではありません。
Hibernate ScrollableResultsを試してみてください、私は引用します:
結果内を任意の増分で移動できる結果イテレータ。Query / ScrollableResultsパターンは、JDBC PreparedStatement / ResultSetパターンに非常に似ており、このインターフェースのメソッドのセマンティクスは、ResultSetの同様の名前のメソッドに似ています。
QueryオブジェクトのFirstResult
およびでの単純なメカニズムを使用できます。MaxResults
query.setFirstResult(5);
query.setMaxResults(5);
5
上記は、5番目のレコードからレコードをフェッチします。
ScrollableResultsを使用できますが、大きな結果の場合は上記に比べて遅くなります。
大規模なデータセットでクエリを改善するには、キーセットページネーションを使用し、可能であればオフセットページネーションを回避します。オフセットを使用するとすべてのデータを読み取る必要があり、キーセットページネーション(フィルター)を使用するとデータセットが減少するためです(改善が重要になる場合があります)。