2011-05-17 12 views
2

私はCriteriaBuilderのようなものでデータベース結果を改ページできたいと思っていますが、結果が一貫している必要があります。 Grailsは同じトランザクションでデータベース結果をページングしますか?

何とかパジネートと同じトランザクション内での選択を維持するための簡単な方法はあり

/

+0

明らかにあなたはキャッシュ(例えばセッション)ですべての結果を格納することによって、これを行うことができ、それが台無しにしてしまいますページネーションの主な利点の1つ、つまり必要なレコードのみを取得します。良い質問、これよりもいくつかのより有用な答えを楽しみにしています。 –

答えて

1

あなたはScrollableResultを使用してメモリに結果セット全体を格納するのに廃棄されたことがありますか?

ルックhere

DomainObject.createCriteria().scroll{}はScrollableResult

+0

これはgrails内でどうやって使うのですか?これが私の必要ですが、結果のグループ化のサイズを指定したいと思います。 –

+0

申し訳ありませんが、グレイルズのお手伝いができません。休止状態では、コレクションを移動したり、繰り返したりできます。 – ssedano

+1

Grailsのドキュメントには、Criteriaクエリからスクロール可能なResultSetを取得する方法に関する情報が含まれています。http://grails.org/doc/latest/ref/Domain%20Classes/createCriteria.html – Ruben

-2

あなたは現在のページ番号に基づき、基準にしたいオフセットを指定して返します。

def results = DomainClass.withCriteria { 
    firstResult ((currentPageNumber - 1) * itemsPerPage) 
    maxResults (itemsPerPage) 
} 

総ページ数を知るために、あなたは別のクエリが必要になります:

def numberOfPages = DomainClass.count() 
if(numberOfPages != 0) numberOfPages = numberOfPages/itemsPerPage + 1 
+0

これはすべて同じトランザクションで行われますか? –

+0

はい、指定された範囲外の行はロードされません。 – Gabriel

+0

私はあなたが私が何を意味しているかをよく理解していません。行1〜10を取得しているときに行11が更新された場合、更新は必要ありません。 –