Hibernate Grails GORM-如何在使用聚合函数时获取PagedResultList

Hibernate Grails GORM-如何在使用聚合函数时获取PagedResultList,hibernate,grails,gorm,hibernate-criteria,Hibernate,Grails,Gorm,Hibernate Criteria,我正在使用Grails1.2.1中的GORM。此时没有升级的机会。这不是grails应用程序本身;相反,它是一个使用groovy并利用GORM实现简单域模型持久化的webapp 我有这样一个问题: actionsByUser = UserAction.createCriteria().list() { projections { countDistinct('id', 'userCount')

我正在使用Grails1.2.1中的GORM。此时没有升级的机会。这不是grails应用程序本身;相反,它是一个使用groovy并利用GORM实现简单域模型持久化的webapp

我有这样一个问题:

actionsByUser = UserAction.createCriteria().list() {
                    projections {
                        countDistinct('id', 'userCount')
                        groupProperty('user')
                    }
                    firstResult(offset)
                    maxResults(max)
                    order('userCount', 'desc')
                }
这不会返回带有getTotalCount方法的PagedResultList,该方法将指示有多少个结果,并让我知道何时显示下一个链接以显示下一页的结果

我试过这样的方法:

actionsByUser = UserAction.createCriteria().list(max:max, offset:offset) {
                    projections {
                        countDistinct('id', 'userCount')
                        groupProperty('user')
                    }
                    order('userCount', 'desc')
                }
i、 e.更改以通过初始映射参数列表传递max和offset参数,而不是在闭包中使用DSL

这在以下方面失败:

org.hibernate.QueryException: could not resolve property: userCount of: example.domain.UserAction
at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:67)
at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:61)
at org.hibernate.persister.entity.AbstractEntityPersister.getSubclassPropertyTableNumber(AbstractEntityPersister.java:1392)
at org.hibernate.persister.entity.BasicEntityPropertyMapping.toColumns(BasicEntityPropertyMapping.java:54)
at org.hibernate.persister.entity.AbstractEntityPersister.toColumns(AbstractEntityPersister.java:1367)
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getColumns(CriteriaQueryTranslator.java:457)
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getColumnsUsingProjection(CriteriaQueryTranslator.java:417)
at org.hibernate.criterion.Order.toSqlString(Order.java:68)
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getOrderBy(CriteriaQueryTranslator.java:371)
at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:113)
at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:82)
at org.hibernate.loader.criteria.CriteriaLoader.<init>(CriteriaLoader.java:91)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1578)
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:306)
at grails.orm.HibernateCriteriaBuilder.invokeMethod(HibernateCriteriaBuilder.java:1025)
如何从grails中获得适合于执行第1页(共n页)功能的结果


更新:正如建议的那样-我在freenode上没有收到关于grails的响应。

它没有很好的文档记录,但是将您的分页参数放在createCriteria中。列表[在这里!]应该会返回一个PagedResultList

例如

def result=Thing.createCriteria().list(max:params.max, offset:params.offset){
   maxResults(params.max)
   firstResult(params.offset)
} 
[更新]

您的错误似乎与无效查询有关,无法解析属性:userCount。再看一下您的投影查询。乍一看,这似乎还不错,Grails1.2中似乎解决了一个问题

此外,这里有一些链接解释了记录不全的PagedResultList


问题是HibernateCriteria查询不理解在projections中定义的别名,这是导致错误的原因,无法解决属性,该问题尚待解决

这是吉拉的票

对不起,我不明白。我不清楚这与我给出的失败例子有什么不同?我尝试了你的建议,似乎只指定了两次最大值和偏移量?但仍然会得到相同的异常。你能帮我理解我遗漏了什么吗?我的投影查询在第一种情况下有效,但在第二种情况下无效。AFAICT我能看到的唯一区别是,在代码的第二位中,我通过一个映射将max和offset参数作为第一个参数传递进来,试图按照。因此,我的问题可以重新定义为:当我试图取回PagedResultList时,为什么投影查询不起作用?我怀疑投影与listMap、Close不起作用。@jabely如果案例+1是你的问题,我不会感到惊讶。也许把这个问题发到吉拉那里?