这是我问here
的问题的扩展我有这样的关系
class Foo {
static hasMany = [bars: Bar]
}
class Bar {
// Has nothing to tie it back to Foo or Thing
}
class Thing {
static hasMany = [bars: Bar]
}
我有一个Thing
的实例。 我希望获得与Foo
的所有Bar
实例关联的Thing
的所有实例,这些实例与我拥有的Thing
实例相关联。
我想通过HQL获得什么(HQL是否知道Foo
和Thing1
之间的间接关系?)
更新
以下是可能关系的图片。
如果我有Foo
并希望通过Bar
与Foo1
间接关联的所有Foo2
实例,那么我需要的解决方案将返回{{1}}和{{ 1}}
答案 0 :(得分:3)
这样的事情应该有效:
select foo from Foo foo
where not exists (select thingBar.id from Thing thing left join thing.bars thingBar
where thing.id = :thingId
and thingBar.id not in (select fooBar.id from Foo foo2
left join foo2.bars fooBar
where foo2.id = foo.id))
编辑:既然你用漂亮的图片解释了你想要的东西,那就更简单了。事实上你想要的是所有与至少一个栏(而不是所有的栏)相关联的Foo也链接到Thing。因此查询将是:
select foo from Foo foo
inner join foo.bars fooBar
where fooBar.id in (select thingBar.id from Thing thing inner join thing.bars thingBar)
答案 1 :(得分:0)
这样的事情会起作用吗?
Foo.withCriteria {
bars {
in('id', thing.bars.collect { it.id })
}
}