首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带别名的GORM notIn子查询

带别名的GORM notIn子查询
EN

Stack Overflow用户
提问于 2019-08-03 00:20:36
回答 1查看 307关注 0票数 0

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

代码语言:javascript
复制
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:

代码语言:javascript
复制
        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

我觉得我真的很接近了,但我不能通过查看文档来弄清楚。在这方面它是相当稀疏的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-03 04:38:29

正如"7.4.8. GORM中更高级的子查询“下的documentation所示,

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57330257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档