8

プロパティで射影を使用すると、結果は、射影ブロックで定義された順序と同じ順序で要素を含むリストとして返されます。同時に、プロパティ名がリストにないため、結果が渡され、呼び出し元はどの値がどのプロパティに属しているかを知る必要があるため、開発者にとっては非常に不利です。プロパティ名を値のキーとして基準クエリからマップを返す方法はありますか?

したがって、次のコード:

def c = Trade.createCriteria()
def remicTrades = c.list {

    projections {
        property('title', 'title')
        property('author.name', 'author')
    }
    def now = new Date()
    between('publishedDate', now-365, now)
}

これは以下を返します:

[['book1', 'author1']['book2', 'author2']]

代わりに、次のように返します。

[[book:'book1', author:'author1'][book:'book2', author:'author2']]

結果を取得した後にこのように調整できることはわかっていますが、単純なリストではなく、SQL クエリの結果を模倣するマップのリストを返すために、プロパティ エイリアスを条件で使用する必要があると強く感じています。

4

2 に答える 2

1

あなたの質問の推論に同意してください。これは実際にはコア GORM ソリューションの一部である必要があります。とはいえ、これが私の回避策です。

def props = ['name','phone']
def query = Person.where {}.projections {
        props.each{
                property(it)
        }

}
def people = query.list().collect{ row->
        def cols = [:]
        row.eachWithIndex{colVal, ind->
            cols[props[ind]] = colVal
        }
        cols
}
println people // shows [['name':'John','phone':'5551212'],['name':'Magdalena','phone':'5552423']]
于 2012-11-18T05:49:53.533 に答える