Grails GORM notIn子查询,别名为
我正在尝试在GORM中实现以下SQL查询: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
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)