Grails Criteria - 列表内容

Grails Criteria - list contents

这些是我的域对象

User{
 hasMany = {roles: UserRole}
}

UserRole{
  User user
  Role role
}

Role{
  String authority
}

我需要根据角色查找用户。为此,我尝试使用以下标准:

  def role_admin = Role.findByAuthority('ROLE_ADMIN')
  def criteria = new DetachedCriteria(User).build {
    roles{
      role{
        idEq(role_admin.id)
      }
    }
  }

  result.users = criteria.list(params)
  result.total = criteria.count()

上面总是 return 个结果,尽管我已经通过直接查看数据库验证应该有更多结果。传递给列表的 params 是正确的,但我尝试删除它们只是为了确定。我看不出上面有什么问题,有什么建议吗?

我也试过这个

roles{
    role{
        eq("authority","ROLE_ADMIN")
    }
}

但是抛出异常:

Unknown column 'role_alias2_.authority' in 'where clause'

这对我有用:

def criteriaUsers = UserRole.createCriteria()
def users =  criteriaUsers.listDistinct{
                eq("role", role_admin)
             }.user

旁注:从您的 classes 的命名法来看,您似乎正在使用 spring-security-core 插件。以我的拙见,hasMany = [roles: UserRole] 是多余的,因为关联用户 - 角色已经在 UserRole class.

中建模