1

grails 1.2.1 の GORM を使用しています。この時点でアップグレードの可能性はありません。これ自体は Grails アプリではありません。むしろ、Groovy を使用し、GORM を活用してドメイン モデルの永続性を容易にする Web アプリケーションです。

次のようなクエリがあります。

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')
                }

listつまり、Closure 内で DSL を使用するのではなく、最初の Map パラメータを介して max パラメータと offset パラメータを に渡すように変更します。

それは失敗します:

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)

"page 1 of n" 機能を実行するのに適した結果を grails から取得するにはどうすればよいですか?

更新:提案どおり Grails JIRAで発生 - #grails on freenode で応答がありませんでした。

4

2 に答える 2

0

問題は、HibernateCriteria クエリがプロジェクションで定義されたエイリアスを認識しないことです。これがエラー「プロパティを解決できません」の理由であり、この問題はまだ修正されていません。

ジラ チケットはこちら http://jira.grails.org/browse/GRAILS-3875

于 2012-03-16T04:09:11.230 に答える
0

十分に文書化されていませんが、createCriteria.list([in here!])これにページネーションパラメーターを入れると、PagedResultList

例...

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

[アップデート]

あなたのエラーは無効なクエリにあるようcould not resolve property: userCountです。射影クエリをもう一度見てください。 一見問題ないように見えますが、Grails 1.2 で解決されたように見えるjira の問題がありました。

また、不十分に文書化された PagedResultList を説明するリンクがいくつかあります...

ここここ

于 2011-07-20T10:26:25.010 に答える