Объект Grails criteria groupby

#sql #grails #criteria

#sql #grails #критерии

Вопрос:

Пример группировки по названию зон:

 def result = User.createCriteria().list{

     projections {
          roles  {
               zones{
                    groupProperty("name")
               }
          }
     }
}
  

но предположим, я хочу получить «идентификатор» или другие атрибуты. дело в том, что я хочу, чтобы объект представлял группу, а не строку «name».

 result.each{ println it.customFuncion() }
  

«зоны» — это атрибут hasMany, и тогда я не могу группировать сам по себе. Что должно быть сделано, но не работает:

 def result = User.createCriteria().list{

     projections {
          roles  {
               groupProperty("zones")
          }
     }    
}
  

Возможно ли это? Спасибо, ребята!

Ответ №1:

используйте hql для сложных запросов:

 def result = User.executeQuery("select u.id, zone.name from User as u inner join u.roles as role inner join role.zones as zone group by u.id, zone.name")
  

Затем вы можете получить доступ к столбцам результатов следующим образом:

 result.each { row -> row[0] // u.id } // or access via defined column name
  

Представьте себе, что я не знаю ваших настоящих названий многих коллекций.