标准中存在条款

时间:2014-08-14 12:45:25

标签: grails gorm

考虑这个问题:


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列表替换内部标准,它就可以工作。任何线索?

提前致谢

1 个答案:

答案 0 :(得分:0)

未测试:尝试Sql限制

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

}

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