2012-09-28 3 views
7

PageRequestを使用し、かなり大きなデータセットに当てはまるSpringデータを使用しています。すべてのクエリは、クエリが実行されている場合を除いて最適に実行され、合計ページ数が取得されます。この機能を無効にする方法はありますか、または私たち自身のPageableを実装する必要がありますか?PageRequestからのカウントクエリを無効にして、合計ページを取得する方法はありますか?

http://static.springsource.org/spring-data/data-commons/docs/1.3.2.RELEASE/api/org/springframework/data/domain/PageRequest.html

http://static.springsource.org/spring-data/data-commons/docs/1.3.2.RELEASE/api/org/springframework/data/domain/Pageable.html

編集:私はこの問題を回避する唯一の方法はそれが開始行とレコードの数を設定することができるように、ばねのデータを使用してEntityManagerを使用しないことであると信じて、さらに分析した後戻る。次のページがあるかどうかだけで1つの余分なレコードを取得するだけです。また、Springデータでは不可能と思われる動的クエリが必要です。

編集2:これは、ちょっと待っていないようです。みんなありがとう!!!

答えて

17

これを達成する方法は、単純に戻り値としてListを使用することです。したがって、このように定義されたリポジトリの例:

interface CustomerRepository extends Repository<Customer, Long> { 

    List<Customer> findByLastname(Stirng lastname, Pageable pageable); 
} 

クエリ実行エンジンは、オフセットと同様に利きPAGESIZE Pageableではなく、我々はPageを構築する必要がないように、追加のカウントクエリをトリガしないで適用されますインスタンス。これは参考資料のrelevant sectionsにも記載されています。

+0

こんにちはOliver、findAll()メソッドを使って同じことができますか?リストのようなもの findAll(ページ可能なページ可能)? (したがって、次のようなものを生成することができます:SELECT * FROM TABLE ORDER BY xxx LIMIT yyy)?私はそれを行う方法を理解していませんでした(そして、このスレッドではRalphとの "火炎戦争"を始めました): –

+0

1ページにすべてを入れたいのですが?つまり、改ページを無視します。新しいPageRequest(0、0)のようなことをすることはできますか? – Stephane

+0

@StephaneEybert - すべてが必要な場合は、メソッド定義からPageableパラメータを省略してください。もちろん、このデータセットや巨大なデータセットには注意する必要があります。 – JBCP

関連する問題