2012-02-07 11 views
13

grailsに条件を照会し、リストのリストの代わりにマップのリストを受け取ることは可能ですか?私は結果に列名を持たせて、数値配列のオフセットではなく連想配列で作業したいと思っています。私は現在、次のようなことをしています条件付きGrailsクエリ:列で地図を戻す方法?

def topFiveUsers = BlogEntry.createCriteria().list { 
     projections { 
      count('id') 
      groupProperty('author') 
     } 
     maxResults 5 
    } 

結果は[[123, app.User:1][111, app.User:2][...]...]、つまりリストのリストです。むしろ[[posts:123, author: app.User:1][posts: 111, author app.User:2][...]...]のようなものが欲しいと思います。

いつものように:助けをいただきありがとうございます!

答えて

2
def topFiveList = [] 
topFiveUsers.each { rec -> 
    topFiveList << [posts: rec[0], author: rec[1]] 
} 
2
def converted = topFiveUsers.collect{ [posts: it[0], author: it[1]] } 
+0

返信いただきありがとうございます。もちろん、私は後で結果を変えることができます - それは私が現時点でやっていることです。次に、結果セットの後処理のオーバーヘッドをスキップします。私は、休止状態のコードのどこかで、まったく同じ変換が起こっていると思います。 – fluxon

+0

私が投稿した直後に、2段階の解決に興味がないことが私に起こりました。 –

+0

心配はいりません!とにかくあなたのサポートのためにありがとう! seはちょうどいいです! – fluxon

30

使用resultTransformer()。 パラメータとして使用CriteriaSpecification.ALIAS_TO_ENTITY_MAP
このトピックのドキュメントと例は不十分です。しかし、ここに例があります:

import org.hibernate.criterion.CriteriaSpecification 

BlogEntry.withCriteria { 
    maxResults 5 
    resultTransformer(CriteriaSpecification.ALIAS_TO_ENTITY_MAP) 
    projections { 
    count('id', 'total') 
    groupProperty('author', 'author') 
    }  
} 

すべての投影にエイリアスが必要であることに注意してください。それ以外の場合、結果のマップはNULLで構成されます。

+0

華麗かつ優雅。 Sergeyさん、ありがとうございました。 –

+0

優秀.......ありがとうございました.... – akiong

関連する問題