2017-06-26 3 views
0

groovyでページネーションを使用する場合、ページあたり最大10個のレコードを取得した後にクエリを返すようにします。Grailsページネーションの最大レコードセット

私の基準で一致する10,000個のレコードがあるとします。私はPagedResultListを10に戻し、results.totalCount = 500 NOT 10,000にします。

私は基準でmaxResults(500)を使ってこれを実行しようとしていますが、失敗しています。 maxを使用している場合はmaxResultsを使用できませんか?

答えて

0

maxは、オブジェクトとともにArrayListを返します。

maxResults魔女のPagedResultListを返します。totalCountを使用して、条件に一致するオブジェクトを数えるための2番目のクエリを発行できます。 totalCountは2番目のクエリです。実際にはすべての10kオブジェクトをフェッチしません。

だから私はあなたの説明の問題を解決する方法がわかりません。なぜなら、クエリがデータベース内の10kと一致すると、それはあなたの合計カウントになるからです。あなたはtotalcountが> 500、500と表示されているかどうかチェックすることができます。

しかし、もしGORMが10kオブジェクトを取り戻しているのであれば、そうではありません。詳細については、最初の例http://docs.grails.org/3.2.10/ref/Domain%20Classes/createCriteria.htmlを参照してください。

挙動を示すための非常に簡単なコントローラ:

def index() { 
    println "max:" 
    def q1 = Foo.createCriteria().list(max: 10) { } 
    println q1.class.name 
    println q1.totalCount 


    println "maxResults:" 
    def q2 = Foo.createCriteria().list { 
     maxResults(10) 
    } 
    println q2.class.name 
    // println q2.size() // totalCount doesn't exist on an ArrayList 
} 

出力:

max: 
Hibernate: select this_.id as id1_0_0_, this_.version as version2_0_0_, 
this_.name as name3_0_0_ from foo this_ limit ? 
grails.orm.PagedResultList 
Hibernate: select count(*) as y0_ from foo this_ 
2 

maxResults: 
Hibernate: select this_.id as id1_0_0_, this_.version as version2_0_0_, 
this_.name as name3_0_0_ from foo this_ limit ? 
java.util.ArrayList 

あなたはまた、生成されたHQLは同じ方法のいずれかと2番目のクエリで見ることができますがtotalCountプロパティのために送られます。

希望に役立ちます。

+0

私は10k個のオブジェクトすべてを取り戻すわけではありませんが、10k個のオブジェクトがあることを知るためにクエリを完了しているわけではありません。 –

+0

「クエリを完了する」とは、dbがクエリを実行して結果を取得することを意味します。私はあなたが何を記述するためにSQLの方法を認識していない。インデックス化されたフィールドでこれを行う場合、それは非常に速くなければなりません。 – erichelgeson

関連する問題