2012-04-25 7 views
2

私はしばらくの間ORMフレームワークを使用してきましたが、私はHibernateの方がかなり新しいです。Hibernateのページネーション:ScrollableResultとsetMaxResult()+ setFirstResult()

偉大な結果セットを取得し、それを改ページするクエリ(クエリまたは条件であるかどうかは関係ありません)があるとします。 setMaxResult()とsetFirstResult()メソッドのコンボを使用するのか、ScrollableResultを使用するのですか?

パフォーマンス(実行時間とメモリ消費量)に関する最良のアプローチはどれですか?

答えて

2

個別のリクエスト/応答サイクルで別々の結果ページを提供するWebアプリケーションを実装している場合、ScrollableResultを使用する方法はありません。 setFirst/Max/Resultを使用します。しかし、正確なクエリと結果の合計サイズに応じて、これは実際のパフォーマンスを低下させる可能性があります。特に、貧弱なデータベースが毎回の結果セットをソートしなければならない場合、100〜110番目のレコードが何かを計算することができます。

1

先日同じ質問があり、setMaxResult(..)setFirstResult(..)に解決しました。問題は2つです:あなたのJDBCドライバやデータベースが適切に処理していない場合

  • ScrollableResultnext()をコールするたびに1つのクエリを実行することもできます。これは私達のケースでした(MySQL)
  • JPA標準ではなく、休止状態になっています。
+1

ScrollableResultはそのようなことはしません(それはまともなデータベースではありません)。実際はかなりパフォーマンスがあります。これはJDBCのスクロール・サポートに直接マップされ、ネイティブのDBカーソルにマップされます。たぶんあなたの経験は、カーソルをサポートしていないDBを使って作業していることでしょうか?そうすれば、間違いなくまったくの災難になるでしょう。 –

+0

hmm、おそらくmysql jdbcドライバが正しく処理していない – Bozho

関連する問題