grails - GORM notIn带有别名的子查询

标签 grails gorm

我正在尝试在GORM中实现以下SQL查询:

select au.* from App_user au
inner join SEC_USER su on su.id=au.SEC_USER_ID
where 
not su.id in (
    select susr.SEC_USER_ID from SEC_USER_SEC_ROLE susr
        inner join SEC_ROLE sr on susr.SEC_ROLE_ID=sr.id
    where sr.authority like 'ROLE_INTERNAL%'
    and susr.SEC_USER_ID=su.id
)

(获取所有不具有与ROLE_INTERNAL。*模式匹配的角色的用户)

我有一个使用GORM的有效查询:
        AppUser.createCriteria().list(args, {
            secUser {
//                def su = SecUser
                notIn "id", SecUserSecRole.where {
                    secRole {
                        authority ==~ 'ROLE_INTERNAL%'
                    }
/*
                    secUser {
                        id == su.id
                    }
*/
                }.property("secUser.id")
            }
        })

但是,由于我不知道如何在条件DSL中添加SQL where子句and susr.SEC_USER_ID=su.id,因此该查询效率很低。

我在这里到那里都提到了使用注释的代码,在根级别创建SecUser(su)的别名,然后在子查询中使用它的方法,但是在尝试取消注释附加语句时,出现了以下异常:
No such property: id for class: SecUser
我觉得我真的很亲密,但是我无法通过查看文档来弄清楚。在这方面它很少。

最佳答案

documentation在“7.4.8。GORM中的更多高级子查询”下所示,

DetachedCriteria<AppUser> query = AppUser.where {
    secUser {
        def u = SecUser
        notIn "id", SecUserSecRole.where {
            def u2 = secUser
            secRole.authority ==~ 'ROLE_INTERNAL%' && u2.id == u.id
        }.property("secUser.id")
    }
}
query.list(args)

关于grails - GORM notIn带有别名的子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57330257/

相关文章:

multithreading - 如何以单线程模式启动我的 grails 开发服务器?

grails - 在grails中为neo4j导入插件失败

grails - Grails看不到数据库表的内容

grails - Grails 3.2-对象版本不会更新

grails - 在Grails中映射两个域类

grails - 如何将 Fuel UX 集成到 Grails 项目中?

grails - Grails渴望动态发现者

grails - Grails 2.4.4 executeQuery()从数据库表联接表

grails - grails复合ID无效

grails - 如何使用条件限制域结果