gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 15:16:31 37 4
gpt4 key购买 nike

我正在尝试在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/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com