Grails-通过父集合中存在子对象来查找所有对象

Grails-通过父集合中存在子对象来查找所有对象,grails,groovy,Grails,Groovy,我有两个域类:Project和User 项目通过一个名为allowedUsers的SortedSet拥有许多on User。用户不属于项目 我想找到允许特定用户查看的所有项目。因此,尝试以下语法: Project.findAll{ it.allowedUsers.contains( userA ) } Project.findAll{ userA in it.allowedUsers } 这些不起作用。而且find符号似乎不支持类似于ThatContains运算符的东西 如何实现我的目标?标准

我有两个域类:Project和User

项目通过一个名为allowedUsers的SortedSet拥有许多on User。用户不属于项目

我想找到允许特定用户查看的所有项目。因此,尝试以下语法:

Project.findAll{ it.allowedUsers.contains( userA ) }
Project.findAll{ userA in it.allowedUsers }
这些不起作用。而且find符号似乎不支持类似于ThatContains运算符的东西


如何实现我的目标?

标准应该有效,请查看中的“查询关联”部分。你能试一下吗

def c = Project.createCriteria()
def results = c.list {
    allowedUsers{
        eq('id', userA.id)
    }
}

标准应该有效,请查看中的“查询关联”部分。你能试一下吗

def c = Project.createCriteria()
def results = c.list {
    allowedUsers{
        eq('id', userA.id)
    }
}

您也可以尝试
where
查询

def query = Project.where{
    allowedUsers{id == userA.id}
}

def results = query.list()
或HQL

def query = """
             select p from Project as p 
             inner join p.allowedUsers as user 
             where user.id = :user
            """

def results = Project.executeQuery(query, [user: userA.id])

您也可以尝试
where
查询

def query = Project.where{
    allowedUsers{id == userA.id}
}

def results = query.list()
或HQL

def query = """
             select p from Project as p 
             inner join p.allowedUsers as user 
             where user.id = :user
            """

def results = Project.executeQuery(query, [user: userA.id])

此外,createCriteria似乎不支持“contains”运算符,因此认为该运算符不起作用。此外,createCriteria似乎不支持“contains”运算符,因此认为该运算符不起作用。