为什么带有JOIN的Grails / HQL查询会返回域类对的列表?

时间:2010-04-25 03:53:19

标签: grails join hql

我无法弄清楚如何在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不是PhotoOwners的列表。这是[PhotoOwner,PhotoStorage]对的列表。由于我正在做一个PhotoOwner.findAll,我原本希望看到只有PhotoOwners。

我做错了什么,或者这是正确的行为?

2 个答案:

答案 0 :(得分:5)

executeQueryfindAll有点误导,因为您调用它们的类与查询或其返回类型无关 - GORM将方法添加到所有域类。

考虑到你问我想要的问题的方式

def latestPhotosForUser = PhotoOwner.executeQuery(
   "SELECT b FROM PhotoOwner a, PhotoStorage b WHERE a.owner=:person AND a.photo = b",
   [person:person], [max:3])

答案 1 :(得分:0)

我想说你可以通过动态查找器实现这一点,如下所示:

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

你可以深入了解最新的PictureForUser.photo,以便进入存储。