我正在尝试在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
我觉得我真的很接近了,但我不能通过查看文档来弄清楚。在这方面它是相当稀疏的。
发布于 2019-08-03 04:38:29
正如"7.4.8. GORM中更高级的子查询“下的documentation所示,
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)https://stackoverflow.com/questions/57330257
复制相似问题