Grails内部结合了“ in”和“ isEmpty”,或忽略了“ isEmpty”]]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Grails内部结合了“ in”和“ isEmpty”,或忽略了“ isEmpty”]]相关的知识,希望对你有一定的参考价值。

我希望能够编写一个条件,使我可以搜索所有具有特定DevelopmentOfInterest(hasMany)或根本没有任何线索的线索。

我的域模型看起来像这样:

Lead {
   Set<Development> developmentsOfInterest
   static hasMany = [
        developmentsOfInterest:Development
   ]
}

如果我根据发展情况列表搜索特定列表,则可以在我的标准中使用以下内容:

developmentsOfInterest{
    'in'("id", developments*.id)
}

要找到所有没有任何进展的东西,我使用isEmpty

isEmpty("developmentsOfInterest")

所以逻辑告诉我,如果我再将这2个放到OR中,我会得到合并的列表。

or{
       isEmpty("developmentsOfInterest")
       developmentsOfInterest {
           'in'("id", developments*.id)
       }
 }

不会。。它只会返回感兴趣的列表(基本上忽略“ isEmpty”)

sql 生成

如下

where (this_.account_id=? and (not exists (select 1 from lead_development where this_.id=lead_developments_of_interest_id) or (developmen1_.id in (?, ?))))

但是我认为这将是正确的sql命令?读取正确:

(not exists (select 1 from lead_development where this_.id=lead_developments_of_interest_id) or (developmen1_.id in (?, ?))

更新:我比较了isEmpty()或sizeEq()和“ in”生成的SQL,“ in”通过join添加了一堆额外的查询代码。我猜测联接不正确,这会导致isEmpty无法正常工作(因为它将仅显示与developmentOfInterests联接的项目)

where (this_.account_id=? and (? = (select count(*) from lead_development where this_.id=lead_developments_of_interest_id) or this_.id in (?))) order by lower(this_1_.first_name) asc limit ?

Account_id部分过滤条件进一步向上。有人可以帮忙吗?问候,

我希望能够编写一个条件,使我可以搜索所有具有特定DevelopmentOfInterest(hasMany)或根本没有任何线索的线索。我的域模型看起来像这样:...

答案

您可以按如下所示放置您的条件:

另一答案

我知道这是一个非常老的问题,但是我最近遇到了同一问题,我认为问题是grails将默认为内部联接,从而导致isEmpty被忽略

以上是关于Grails内部结合了“ in”和“ isEmpty”,或忽略了“ isEmpty”]]的主要内容,如果未能解决你的问题,请参考以下文章

如何与内部 svn 存储库共享自定义 Grails 插件?

grails 2.3.4 结合angular js的智能文件夹结构

grails的criteria和hql查询

如何使用企业 Ivy 实例进行 Grails 依赖管理来解决内部工件

Grails:我如何模拟被测类的其他方法,这些方法可能在测试期间被内部调用

Grails:服务 VS Groovy 类