【发布时间】:2018-02-20 09:09:46
【问题描述】:
我有以下代码
PagedResultList res = myService.getPage(paginateParams, ...)
println res.size() // returns 2
println res.getTotalCount() // returns 1
getPage 看起来像:
def criteria = MyDomain.createCriteria()
criteria.list(max: paginateParams.max, offset: paginateParams.offset) { // max is 10, offset is 0, sortBy is updatedAt and sortOrder is desc
eq('org', org)
order(paginateParams.sortBy, paginateParams.sortOrder)
}
为什么这两种方法返回不同的值?该文档没有解释差异,但确实提到 getTotalCount 用于记录数
目前在 grails 2.4.5 上
编辑:
println on res 打印出来:
res: [
com.<hidden>.MyDomain: 41679f98-a7c5-4193-bba8-601725007c1a,
com.<hidden>.MyDomain: 41679f98-a7c5-4193-bba8-601725007c1a]
是的, res 有两次 SINGLE 对象 - 这就是我要修复的错误。我怎么知道?我在 MyDomain 的 ID 上有一个主键,当我检查数据库时,它还显示了这个特定组织的一条记录(请参阅我的标准)
编辑 2:我发现了这条评论 (http://docs.grails.org/2.4.5/ref/Domain%20Classes/createCriteria.html)
listDistinct 如果使用子查询或关联,则可能会结束 在结果集中多次使用同一行。在休眠一 会做一个“CriteriaSpecification.DISTINCT_ROOT_ENTITY”。在 Grails 一 只用这个方法就可以做到。
如果我理解正确,他们说“list”方法的方式在这种情况下不起作用,请改用 listDistinct 但随后他们会继续警告:
listDistinct() 方法不适用于分页 选项 maxResult 和 firstResult。如果您需要不同的结果 分页,我们目前推荐你使用HQL。你可以了解 来自这篇博文的更多信息。
但是,博客文章是一个死链接。
相关:GORM createCriteria and list do not return the same results : what can I do?
【问题讨论】:
-
能否打印 res 的全部内容?
-
@WallSkyBlue 完成,编辑了我的原始帖子
-
嗯...我猜你的号码不匹配,因为重复,但这比我想象的更糟糕,哈哈,抱歉不知道这个
标签: grails grails-orm