我正在尝试这样的事情:
def pagingParams = SortingAndPagingUtils.preparePaging(params)
def Objs = Obj.createCriteria().list(pagingParams) {
baseCriteria(params, delegate)
}
我的pagingParams看起来像:
[max: pageSize, offset: offset]
和我的baseCriteria
创建了一个类似的订单:
[['field','ASC]]
假设我的页面大小为10.我首先获取10个结果 - 它们确实按field
排序。我再拿10个(第二页)。就其本身而言,第二页结果排序很好,但是,它们不会根据第一页结果进行排序。
简单示例:
First page: [10, 9, 9, 9, 8, 7, 6, 5, 4, 3]
Second page: [9, 5, 4, 3, 2, 1, 0 ...]
我该如何解决这个问题?这是正常的还是我错过了什么?
稍后修改:
我观察到,如果我增加页面大小,那么我就不会得到如此未分类的结果(有点明显,但值得一提)
甚至稍后编辑:
我为之前没有说清楚而道歉。以下是baseCriteria
方法的样子:
private def baseCriteria(params, builder) {
def sortOrderPairs = SortingAndPagingUtils.prepareSorting(params)
def result = {
sortOrderPairs.each {
order((it[0] as String), (it[1] as String))
}
}
result.delegate = builder
result()
}
sortOrderPairs
看起来像
[['field','ASC]]
据我所知,这个
sortOrderPairs.each {
order((it[0] as String), (it[1] as String))
}
应该做的伎俩,对吗?但事实并非如此。
甚至是lateeer编辑
我尝试简化所有内容并且只有
def tasks = Obj.createCriteria().list(max: pageSize, offset: pageSize * (currentPage - 1)) {
order('field', 'DESC')
}
但问题仍然存在!
甚至尝试过
def tasks = Task.createCriteria().list(max: pageSize, offset: pageSize * (currentPage - 1), sort: 'field', order: 'DESC');
同样的问题