findAll()HQL不返回grails中的分页列表

时间:2014-03-26 17:25:01

标签: grails pagination

我正在处理grails应用程序,在此我必须在list.gsp上应用过滤器框。当我使用以下查询进行过滤时(在我的服务中)我得到分页列表

    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()为我提供获取分页列表的解决方案。

感谢。

2 个答案:

答案 0 :(得分:4)

根据您的评论,您可以在获得PagedResultList

的情况下执行此操作
def results = TripOrder.createCriteria.list(params) {
    customer {
       ilike 'firstName', "%$searchFor%" 
    }
}

assert results.size() != results.totalCount

它基本上会触发totalCount的另一个查询,如果你想坚持使用findAll或类似于findAll而不是标准,那么你可以使用DetachedCriteria / {{1}来吸收更好的选择懒惰地按需执行查询。同样,您将无法在第一次查询中获得总计数。你必须为同一个人开火。

where query

答案 1 :(得分:3)

findAll并非旨在返回分页列表。它返回一个数组。这在documentation明确说明。