hibernate - 根据GORM查询中的字段过滤出对象

标签 hibernate grails groovy gorm

我是新手,但仍然遇到性能问题。
我有三个域类:

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查询中完成它?
我可以获取这些组织的所有用户的列表,然后运行keepAll {closure}来过滤掉经理,但这将是一个两步过程,并且会造成性能瓶颈。

最佳答案

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

顺便说一句。您不需要显式编写authorities,GORM会为您创建它:
User {
    static hasMany = [authorities: Role]
}

如果要确保授权机构为Set或其他集合类型,则应输入:Set authorities

关于hibernate - 根据GORM查询中的字段过滤出对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14001201/

相关文章:

hibernate - 为什么 Envers 为每个表创建一个审计表

java - 使用 JPA 和 JSF 保留连接表

rest - 带有休息插件的 Grails (2.0.3) 有效!但是单元测试失败了。为什么?

java - 如何从 gradle 任务运行 groovy 方法?

java - SQL 注入(inject)通常如何在 Spring/Hibernate 设置中停止

java - 使用基于数据库的 ID 生成器 "Sequence"或 "Table HiLow"

grails - 在 Controller 中组合保存/更新操作?

grails - Grails按钮无法执行我的操作?

c# - 为什么相同的方法每次运行时间不同?

grails - 可以创建一个未映射到数据库表的域类吗?