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

Arm*_*ohn 12 collections grails grails-orm

假设我有一个名为"User"的域类,它可以跟随其他"User"对象.它这样做有一个字段指定为:

def hasMany=[followedUsers:User]
Run Code Online (Sandbox Code Playgroud)

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

User.findAll { it.followedUsers.contains(userInstance) }
Run Code Online (Sandbox Code Playgroud)

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

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

Bur*_*ith 13

您可以使用此HQL查询:

User.executeQuery(
   'select u from User u where :follower in elements(u.followedUsers)',
   [follower: userInstance])
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢你.我最终做了`def followers = User.findAll("来自User where?in elements(followUsers)",[userInstance])`.我之前已经尝试过这个解决方案,但是缺少`elements()`调用来完成它. (2认同)