Search code examples
grailscollectionsgrails-orm

How do I search for elements whose collection contains another element in Grails?


Let's say I have a domain class called "User" which can follow other "User" objects. It does so having a field specified as:

def hasMany=[followedUsers:User]

I need to do the reverse (find all User objects that follow a specific User object) without setting up the reverse relationship, since it is not a use case performed often. I tried to do something like this, using closures:

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

but this always returns all users in the database, regardless of their follow status. I tried doing with HQL but failed miserably as well.

Could anyone give me a quick pointer on the simplest way to accomplish this? Thank you.


Solution

  • You can use this HQL query:

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