Запросы Grails с критериями: как вернуть карту с колонкой? - PullRequest
13 голосов
/ 08 февраля 2012

Возможно ли запросить граалы с критериями и получить список карт вместо списка списков? Я хотел бы иметь имена столбцов в результатах, чтобы затем работать с «ассоциативным массивом», а не смещениями числовых массивов. В настоящее время я делаю что-то вроде

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

Как всегда: помощь высоко ценится!

Ответы [ 3 ]

30 голосов
/ 07 мая 2013

Использовать 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 голосов
/ 08 февраля 2012
def converted = topFiveUsers.collect{ [posts: it[0], author: it[1]] }
2 голосов
/ 08 февраля 2012
def topFiveList = []
topFiveUsers.each { rec ->
    topFiveList << [posts: rec[0], author: rec[1]]
}
...