Grails GORM notIn子查询,别名为

Grails GORM notIn子查询,别名为,grails,gorm,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.auth

我正在尝试在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
)
获取所有没有与角色_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中添加SQLWHERE子句和susr.SEC_USER_ID=su.ID

我在这里和那里看到过使用注释代码,在根级别创建SecUser su的别名,然后在子查询中使用它,但是我在尝试取消注释其他语句时遇到以下异常:

类:SecUser没有这样的属性:id

我觉得我真的很接近,但我无法通过查看文档来理解它。在这方面它是相当稀疏的。

如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)