Grails GORM查询具有父对象';s属性
仅供参考,请随意建议一个更好的标题。我有以下域模型(我们无法控制): 我的问题是:我有一个Foo列表,我需要找到Foo.someDate==Bar.someDate的所有条,但是只在一个查询中,而不是每个Foo的一个查询中,不涉及延迟加载。此外,将条形图设置为“即时抓取”也不是一个选项 例如,如果这是我的数据(伪代码,为了简单起见,我将id和baz组合成简单的“id”): 我需要在一次查询中返回id为2和4的条。我真的不知道该怎么做Grails GORM查询具有父对象';s属性,grails,gorm,parent-child,subset,Grails,Gorm,Parent Child,Subset,仅供参考,请随意建议一个更好的标题。我有以下域模型(我们无法控制): 我的问题是:我有一个Foo列表,我需要找到Foo.someDate==Bar.someDate的所有条,但是只在一个查询中,而不是每个Foo的一个查询中,不涉及延迟加载。此外,将条形图设置为“即时抓取”也不是一个选项 例如,如果这是我的数据(伪代码,为了简单起见,我将id和baz组合成简单的“id”): 我需要在一次查询中返回id为2和4的条。我真的不知道该怎么做 如果有必要,它可以是HQL,但最好是GORM查询。不确定这是否
如果有必要,它可以是HQL,但最好是GORM查询。不确定这是否是最好的方式,但我认为它会给出结果 :) 虽然我已经删除了您的复合映射约束,然后尝试了它,但它对我有效:) 或使用where查询:
def km = Bar.where {
foo.someDate==someDate
}
println(km.list())
如果您已经有foo列表,则可以通过findAll闭包进行过滤:
fooList.findAll{it.someDate in it.bars.someDate}
:)试试这个:
Bar.executeQuery("select b from Bar b join b.foo as f where b.someDate = f.someDate and f in :fooList", [fooList: fooList])
这将查询所有的foo,对吗?我只想让它查询我目前拥有的列表。是的,我想它会查询所有的foos:)好的……不是我想要的。这可以修改为只使用现有的foo列表进行查询吗?因此,基本上你有一些foo列表,并希望对其运行查询?同样可以通过where query完成,但我认为你不需要它,但我已经在答案中添加了它,它可能会帮助其他人:)不是GORM,但它很简单,并且完全符合我的需要。
def km = Bar.where {
foo.someDate==someDate
}
println(km.list())
fooList.findAll{it.someDate in it.bars.someDate}
Bar.executeQuery("select b from Bar b join b.foo as f where b.someDate = f.someDate and f in :fooList", [fooList: fooList])