2014-03-26 20 views
3

我正在使用grails應用程序,在此我必須在list.gsp上應用過濾器框。當我使用下面的查詢(在我的服務)過濾我得到分頁列表findAll()HQL不返回grails中的分頁列表

def clientCriteria = TripOrder.createCriteria() 
     def searchResults = clientCriteria.list(max: params.max, offset: params.offset, sort: params.sort, order: params.order){ 
      ilike("origin", "${searchFor}%") 
     } 
     println searchResults.getTotalCount() 
     [searchResults: searchResults, searchResultSize: searchResults.getTotalCount()] 

但我的問題是,當我使用的findAll,我沒能得到分頁列表,查詢如下:

def searchResults = TripOrder.findAll("from TripOrder as t where t.status.status=:status", [status: searchFor], [max: maximum, sort: params.sort, order: params.order]) 

      println searchResults.size() 

      [searchResults: searchResults, searchResultSize: searchResults.size()] 

注意:由於某些原因,我不得不使用的findAll()HQL,而不是標準的查詢。

以上結果僅提供等於max的列表數量,而不是提供分頁列表

請爲我提供使用findAll()獲取分頁列表的解決方案。

謝謝。

+1

的findAll不返回分頁列表,它返回一個數組,每個文檔:http://grails.org/doc/2.3.x/ref/Domain%20Classes/findAll.html –

回答

4

基於您的評論,你可以這樣做,你得到一個PagedResultList

def results = TripOrder.createCriteria.list(params) { 
    customer { 
     ilike 'firstName', "%$searchFor%" 
    } 
} 

assert results.size() != results.totalCount 

,如果你要堅持findAll或類似的findAll,而不是標準,則它基本上激發了TOTALCOUNT另一個查詢,你可以通過使用懶惰地執行查詢的DetachedCriteria/where query來吸取更好的選擇。同樣,您將無法在首次查詢中獲得總計數。你必須爲另一個人開火。

def query = TripOrder.where { 
    customer.firstName =~ searchFor 
} 

//Query executed only when list() is called 
def results = query.list(params) 

//Only executed when count() is called 
def totalCount = query.count() 
+0

非常感謝您提供了這個美妙的解釋,我一直在尋找您提供的解決方案。這對我幫助很大。 – mark

3

findAll不適用於返回分頁列表。它返回一個數組。這在documentation中明確說明。

+0

..所以是他們唯一使用標準查詢來獲得grails列表的唯一方法。 – mark

+0

這是正確的。 –

+0

能否請你告訴我如何比較Doamin的屬性,它是一個域類的實例,例如: 類TripOrder {\t \t個人客戶 \t字符串狀態 } 類Person { \t字符串的firstName \t String middleName } 我想使用條件查詢來比較TripOrder的customer.firstName屬性,我將如何實現這一點。謝謝。 – mark