根据GORM查询中的字段过滤掉对象

时间:2012-12-22 08:17:43

标签: hibernate grails groovy gorm

我是grails的新手并且遇到了性能问题。 我有三个域类:

User{
Set authorities
static hasMany = [authorities: Role]
}

Organization{
//more code
}

UserOrganization{
User user
Organization organization
}

为用户分配了许多角色(权限)('ROLE_ADMIN','ROLE_MANAGER')

在一个场景中,我有一个组织列表,我需要找出这些组织的所有具有管理员权限的用户(ROLE_MANAGER)。

我尝试使用这样的GORM:

UserOrganization.createCriteria().list{
inList('organizaton',organizationList)
//but do not know how to filter out users with ROLE_MANAGER authority
} 

有没有办法在单个GORM查询中完成这样的操作? 我可以获取这些组织的所有用户的列表并运行retainAll {closure}来过滤掉管理器,但这将是一个两步过程并产生性能瓶颈。

1 个答案:

答案 0 :(得分:1)

UserOrganization.createCriteria().list{
    inList('organizaton',organizationList)
    user {
        inList('authorities',authoritiesList)
    }
} 

顺便说一下。你不需要明确写authorities GORM会为你创建它:

User {
    static hasMany = [authorities: Role]
}

如果您想确保权限属于Set或其他集合类型,则应编写:Set authorities