如何在Grails中搜索其集合包含其他元素的元素?

时间:2012-01-20 18:38:58

标签: grails collections gorm

假设我有一个名为“User”的域类,它可以跟随其他“User”对象。它有一个指定为:

的字段
def hasMany=[followedUsers:User]

我需要反向(找到跟随特定User对象的所有User对象)而不设置反向关系,因为它不是经常执行的用例。我尝试使用闭包来做这样的事情:

User.findAll { it.followedUsers.contains(userInstance) }

但这始终会返回数据库中的所有用户,无论他们的跟随状态如何。我尝试使用HQL,但也失败了。

有人能给我一个快速指针,说明最简单的方法吗?谢谢。

2 个答案:

答案 0 :(得分:13)

您可以使用此HQL查询:

User.executeQuery(
   'select u from User u where :follower in elements(u.followedUsers)',
   [follower: userInstance])

答案 1 :(得分:1)

在我看来,这种语法更清晰:

User.withCriteria { followedUsers{ eq('id', userInstance.id) } }