我正在处理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()为我提供获取分页列表的解决方案。
感谢。
答案 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明确说明。