考虑这个问题:
select user_id
from user_role a
where a.role_id = -1
and not exists (select 1
from user_role b
where b.role_id != a.role_id
and b.user_id = a.user_id);
我正在尝试使用gorm标准重新创建它。可能吗?如何添加exists子句?
更新
我一直在努力解决这个问题:
UserRole.createCriteria().list{
eq('role', roleObj)
createAlias('user', 'u')
not{
inList('u.id', {
not {
eq('role', roleObj)
}
projections {
property 'user.id'
}
})
}
}
仍然无法正常工作。我在执行它时遇到了这个错误:
DUMMY$_closure1_closure2_closure3_closure4 cannot be cast to java.lang.Long
我不明白错误信息。内部标准返回id列表,如果我用一个long列表替换内部标准,它就可以工作。任何线索?
提前致谢
答案 0 :(得分:0)
未测试:尝试Sql限制
UserRole.createCriteria().list {
and{
eq('roleId',-1)
sqlRestriction(" not exists(select 1
from UserRole b
where ............
)")
}
}
- 希望您已将您的域命名为UserRole,并将列名命名为roleId。