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

Pma*_*Pma 8 grails grails-orm

我有以下域类:

class User {
   static hasMany = [roles:String]
}
Run Code Online (Sandbox Code Playgroud)

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

UPDATE:这是很容易查询的关联,其中类A具有类的列表B实例和两AB的域类.但是这里的类A是一个域类,类B是一个简单的Java字符串.

查询包含其他域对象列表的关联的代码如下所示:

`User.findAll { roles { role_name=='ROLE_ADMIN' } }`
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是一种指定String值的方法,例如:

`User.findAll { roles {THIS_VALUE=='ROLE_ADMIN' }}`
Run Code Online (Sandbox Code Playgroud)

更新2:据我所知,不可能使用具有原始类型集合的标准.但是可以使用HQL:

User.findAll("from User a where :roles in elements(roles)",[roles:'ROLE_ADMIN'])
Run Code Online (Sandbox Code Playgroud)

但是,它不像查询findAllwhere查询那样有用.我不能链接findAll方法,所以定义其他方法,例如:获取ROLE_ADMIN用户名像'xxx'的用户需要重写整个HQL查询.也许有可能以表达的HQL形式表达上述条件where

Rob*_*lea 5

也许你可以这样做:

如果您已有用户列表(userList)

def list = userList.findAll { user -> user.roles =~ 'ROLE_ADMIN' }
Run Code Online (Sandbox Code Playgroud)

希望这有帮助!