Подтвердить что ты не робот

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][...]...].

Как всегда: помощь приветствуется!

4b9b3361

Ответ 1

Используйте 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')
  }      
}  

Обратите внимание, что для всех прогнозов требуется использовать псевдоним. В противном случае результирующая карта состоит из нулей.

Ответ 2

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

Ответ 3

def converted = topFiveUsers.collect{ [posts: it[0], author: it[1]] }