2011-07-20 10 views
1

grails 1.2.1からGORMを使用しています。この時点でアップグレードする機会はありません。これはgrailsアプリそのものではありません。むしろGroovyを使用し、GORMを利用してドメインモデルの永続性を容易にするWebアプリケーションです。Grails GORM - 集計関数を使用するときにPagedResultListを取得する方法

私はこのようなクエリがあります。

actionsByUser = UserAction.createCriteria().list() { 
        projections { 
         countDistinct('id', 'userCount') 
         groupProperty('user') 
        } 
        firstResult(offset) 
        maxResults(max) 
        order('userCount', 'desc') 
       } 

表示するには、次のリンクを表示するとき、私にありますどのように多くの結果を示していると私に知らせてしまうgetTotalCount方法でPagedResultListを返しません。結果の次のページ。むしろ閉鎖内DSLを使用するよりも、最大に合格し、listに初期マップパラメータ経由でパラメータを相殺するために

actionsByUser = UserAction.createCriteria().list(max:max, offset:offset) { 
        projections { 
         countDistinct('id', 'userCount') 
         groupProperty('user') 
        } 
        order('userCount', 'desc') 
       } 

すなわち変更:

は私の代わりにこのような何かを試してみました。で失敗

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) 

がどのように私は戻って「ページ1、nの」機能を実行するのに適してGrailsのからの結果を得ることができますか?

更新:Raised on Grails JIRAを提案しました - 私は#grails on freenodeで回答を得られませんでした。

答えて

0

それは非常によく文書化されますが、これはあなたにPagedResultList

例を返す必要がありますcreateCriteria.list([in here!])であなたのページネーションのparamsを入れていない...

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

は[UPDATE]

あなたのエラーは思わ無効なクエリcould not resolve property: userCountであること。プロジェクションクエリをもう一度見てみましょう。 一見したところではと思われ、Grails 1.2で解決されたようなjira issueがありました。

はまた、ここでは不十分な文書化PagedResultListを説明するいくつかのリンクです...

HereHere

+0

で申し訳ありませんが、私はウントしませんよそれを忘れないでください。私はそれが私が与えた失敗例とどのように違うのかがはっきりしないのですか?私はあなたの提案(ちょうど最大とオフセットを2回指定しているようです)を試しても、同じ例外が発生します。私が何が欠けているのか理解してもらえますか? – jabley

+0

回答を更新しました... –

+0

私の投影クエリは、最初のインスタンスでは動作しますが、2番目のインスタンスでは動作しません。私が見ることができる唯一の違いは、コードの2番目のビットで、 'PagedResultList'を得るために、最初のパラメータとして' Map'を介して 'max'と' offset'パラメータを渡していることです。 [ドキュメント](http://www.grails。org/doc/latest/ref/Domain%20Classes/createCriteria.html)。だから私の質問は "PagedResultListを取得しようとすると、なぜ投影クエリが動作しないのですか"と再定義される可能性があります。 – jabley

0

問題はHibernateCriteriaクエリが」できないエラーの原因である予測で定義されたエイリアスを理解していないですプロパティを解決する」、まだここに

を固定する問題はJIRAチケット http://jira.grails.org/browse/GRAILS-3875

関連する問題