У меня проблемы с проекцией в Grails. Не могли бы вы помочь мне просмотреть их и предложить решения для меня?
Я хочу запросить данные по многим таблицам, которые имеют отношения «многие к одному» и проецируют некоторые свойства на них обоих. Например:
class Person { int id String name String address static hasMany = [cars : Car] } class Car { int id String brand long price Person owner static belongsTo = [owner : Person] }
Итак, как я могу использовать всего один запрос withCriteria (применить проекцию) для получения информации об указанном автомобиле (включая марку, цену и имя владельца)? Можно ли использовать:
Car.withCriteria { projections { property("brand") property("price") property("owner.name") } eq("id", carId) }
Могу ли я использовать проекцию, чтобы получить информацию об одном указанном человеке вместе с названием всех его автомобилей? Например: [01, Пертер, 01 улица А, [Мерседес, Тойота, Дукатти]]?
Особая ситуация: (с вышеприведенным классом Person)
Человек может присоединиться ко многим организациям, а организация может иметь одну "родительскую" организацию (и наоборот, организация может иметь много других зависимых организаций). Но есть правило: человек может вступить только в одну дочернюю организацию данной организации. Итак, для данной организации O и человека P, каков самый быстрый способ получить информацию о P вместе с названием организации, зависящей от O, членом которой является P. Я предпочитаю использовать проекцию Grails.Вот модель данных:
class Person { int id String name String address static hasMany = [joinedOrgs : Organization] } class Organization { int id String name Organization parentOrg static hasMany = [members : Person, childOrgs : Organization] }
Я новичок в Grails и хотел бы лучше понять GORM. Большое вам спасибо за вашу помощь.