我有以下域类:
class User {
static hasMany = [roles:String]
}
我想找到每个有角色ROLE_ADMIN
的用户。有没有可能用动态查找器做到这一点? user.findAllByRoles('ROLE_ADMIN')
似乎给了我一个错误。
更新:查询关联的位置很容易,其中类A
具有类B
个实例的列表,A
和B
都是域类。但是这里的类A
是一个域类,类B
是一个简单的Java字符串。
查询包含其他域对象列表的关联的代码如下所示:
`User.findAll { roles { role_name=='ROLE_ADMIN' } }`
我正在寻找的是一种指定String值的方法,例如:
`User.findAll { roles {THIS_VALUE=='ROLE_ADMIN' }}`
更新2:据我所知,不可能使用带有原始类型集合的标准。可以使用HQL:
User.findAll("from User a where :roles in elements(roles)",[roles:'ROLE_ADMIN'])
然而,它不如findAll
或where
查询有用。我无法链接findAll
方法,因此定义其他方法,例如:使用像'xxx'这样的用户名获取ROLE_ADMIN
用户需要重写整个HQL
查询。也许有可能以HQL
表达式的形式表达上述where
条件?
答案 0 :(得分:5)
也许你可以这样做:
如果您已有用户列表(userList)
def list = userList.findAll { user -> user.roles =~ 'ROLE_ADMIN' }
希望这有帮助!
答案 1 :(得分:0)
我遇到同样的问题How to find records by value in their association property via DetachedCriteria
我做了一些调查,正如我发现的那样,这是不可能的。
GORM DSL本身没有任何方法来检查该值是否包含在关联中。
它隐藏了SQL中的标准:AND
,OR
,IN
。
但是!您可以将关联加入条件Querying by Association Redux
中的表格