8

我有以下域类:

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

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

更新:查询关联非常容易,其中 ClassA有一个类B实例列表,并且两者A都是B域类。但是这里的 classA是一个领域类,而 classB是一个简单的 Java 字符串。

查询包含另一个域对象列表的关联的代码如下所示:

`User.findAll { roles { role_name=='ROLE_ADMIN' } }`

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

`User.findAll { roles {THIS_VALUE=='ROLE_ADMIN' }}`

更新2:据我发现,不可能将标准与原始类型的集合一起使用。但是可以使用 HQL:

User.findAll("from User a where :roles in elements(roles)",[roles:'ROLE_ADMIN'])

但是它不如findAllorwhere查询有用。我不能链接findAll方法,因此定义其他方法,例如:获取ROLE_ADMIN用户名如“xxx”的用户需要重写整个HQL查询。也许可以HQL用表达式的形式表达上述条件where

4

2 回答 2

5

也许您可以执行以下操作:

如果你已经有一个用户列表(userList)

def list = userList.findAll { user -> user.roles =~ 'ROLE_ADMIN' }

希望这有帮助!

于 2012-09-19T13:19:52.317 回答
0

我有同样的问题如何通过 DetachedCriteria 在关联属性中按值查找记录

我做了一些调查,我发现这是不可能的。GORM DSL 本身没有任何方法来检查关联中包含的值。它只包含 SQL 中的标准:AND, OR, IN.

但!您可以在通过 Association Redux 查询的条件中将关联作为表加入

于 2014-02-13T00:17:32.713 回答