Запросы 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][...]...].

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


person fluxon    schedule 07.02.2012    source источник


Ответы (2)


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

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

person FBI    schedule 07.05.2013
comment
Блестящий и элегантный. Большое спасибо Сергей. - person AA.; 31.03.2014

person    schedule
comment
Спасибо за ответ. Конечно, я могу трансформировать результат позже - это то, чем я занимаюсь в данный момент. Затем снова я хочу пропустить накладные расходы на постобработку набора результатов. Я предполагаю, что где-то в коде гибернации все равно происходит то же самое преобразование... - person fluxon; 09.02.2012
comment
Вскоре после того, как я написал, мне пришло в голову, что вас не интересует двухэтапное решение. - person Jim Norman; 09.02.2012
comment
Не волнуйтесь! В любом случае спасибо за вашу поддержку! се просто супер! - person fluxon; 10.02.2012