Запросы 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][...]...]
,
Как всегда: помощь высоко ценится!
3 ответа
Используйте 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')
}
}
Обратите внимание, что псевдоним необходим для всех проекций. В противном случае полученная карта состоит из нулей.
def topFiveList = []
topFiveUsers.each { rec ->
topFiveList << [posts: rec[0], author: rec[1]]
}
def converted = topFiveUsers.collect{ [posts: it[0], author: it[1]] }