圣杯 - 通过父集合中子 obj 的存在查找所有内容



我有2个域类:项目和用户。

项目通过名为 allowedUsers 的排序集在用户上具有许多。用户不属于项目。

我想查找允许特定用户查看的所有项目。所以尝试这样的语法:

Project.findAll{ it.allowedUsers.contains( userA ) }
Project.findAll{ userA in it.allowedUsers }

这些不起作用。而且查找表示法似乎不支持类似 ThatContains 运算符的东西。

怎样才能实现我的目标?

条件应该有效,请查看 http://grails.org/doc/latest/guide/GORM.html#criteria 中的"查询关联"部分。您可以尝试以下方法吗:

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])

最新更新