Grails:通过与String的一对多关联查找

时间:2012-09-19 12:53:00

标签: grails gorm

我有以下域类:

class User {
   static hasMany = [roles:String]
}

我想找到每个有角色ROLE_ADMIN的用户。有没有可能用动态查找器做到这一点? user.findAllByRoles('ROLE_ADMIN')似乎给了我一个错误。

更新:查询关联的位置很容易,其中类A具有类B个实例的列表,AB都是域类。但是这里的类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'])

然而,它不如findAllwhere查询有用。我无法链接findAll方法,因此定义其他方法,例如:使用像'xxx'这样的用户名获取ROLE_ADMIN用户需要重写整个HQL查询。也许有可能以HQL表达式的形式表达上述where条件?

2 个答案:

答案 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中的标准:ANDORIN

但是!您可以将关联加入条件Querying by Association Redux

中的表格