Почему этот запрос Grails / HQL с JOIN возвращает списки пар классов домена? - PullRequest
3 голосов
/ 25 апреля 2010

У меня проблемы с выяснением, как сделать "соединение" в Groovy / Grails и какие значения я получаю

person = User.get(user.id)
def latestPhotosForUser = PhotoOwner.findAll(
  "FROM PhotoOwner AS a, PhotoStorage AS b WHERE (a.owner=:person AND a.photo = b)", 
  [person:person], [max:3])

latestPhotosForUser не является списком владельцев фотографий. Это список пар [PhotoOwner, PhotoStorage]. Так как я делаю PhotoOwner.findAll, я ожидал увидеть только PhotoOwners.

Я что-то не так делаю, или это правильное поведение?

Ответы [ 2 ]

5 голосов
/ 25 апреля 2010

executeQuery и findAll немного вводят в заблуждение, поскольку класс, к которому вы их вызываете, не имеет отношения к запросу или его типу возврата - GORM добавляет методы ко всем классам домена.

Учитывая, как вы задали вопрос, я предполагаю, что вы хотите

def latestPhotosForUser = PhotoOwner.executeQuery(
   "SELECT b FROM PhotoOwner a, PhotoStorage b WHERE a.owner=:person AND a.photo = b",
   [person:person], [max:3])
0 голосов
/ 01 сентября 2011

Я бы сказал, что вы можете добиться этого с помощью динамического поиска, что-то вроде этого:

def latestPhotosForUser = PhotoOwner.findAllByOwner(person, [max:3])

Вы можете просто покопаться в последнемPhotosForUser.photo, чтобы попасть в хранилище.

...