grails - 条件中存在子句

标签 grails grails-orm

考虑这个查询:


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

我不明白错误信息。内部标准返回 ids 列表,如果我用 longs 列表替换内部标准,它就可以工作。有什么线索吗?

提前致谢

最佳答案

未测试:尝试 Sql 限制

 UserRole.createCriteria().list {
  and{
    eq('roleId',-1)
    sqlRestriction(" not exists(select 1 
                        from UserRole  b 
                        where ............ 
                              )")
  }

-- 希望您已将您的域命名为 UserRole 并将列名命名为 roleId。

关于grails - 条件中存在子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25308387/

相关文章:

java - Java、Scala、Groovy 和 jRuby 的平台将用什么语言实现?

validation - Grails:约束:数据库允许空值,但表单不能为空

grails - 如何将 Hibernate Session 绑定(bind)到 Grails 中的线程?

grails-orm - 如何在全局级别将所有 Grails 域的级联设置为 false

grails - 在多对多关系grails中建立索引

grails - 即使使用显式刷新,也无法让 GORM mongodb 插件保存新记录

gwt - 哪个Web应用程序框架?

java - Spring security 导入在 grails 2.4.4 下不起作用

logging - 如何为 grails 插件配置日志记录?

grails - 如何在GEB中选择标签文本?