因为第二个查询选择的属性不仅仅是
Foo
而且
Bar
. 如果你
println foo
,第二个输出
foo
是这样的:
[Foo : 3, Bar : 2]
如果添加
loggingSql = true
对你
dataSource
定义,Hibernate将输出它用于stdout的实际SQL,如下所示:
select
foo0_.id as id0_0_,
bar2_.id as id2_1_,
foo0_.version as version0_0_,
foo0_.value as value0_0_,
bar2_.version as version2_1_,
bar2_.value as value2_1_
from
foo foo0_
left outer join
foo_bar bars1_
on foo0_.id=bars1_.foo_bars_id
left outer join
bar bar2_
on bars1_.bar_id=bar2_.id
where
bar2_.value=?
好啊。但如何避免返回
酒吧
从查询中?-我现在没有一个好的解决方案。
我投票赞成使用
select clause with HQL
但是在实践中,这些语法中的任何一种都会在GORM中产生错误。可能可以通过使用
Hibernate
Criteria
但是我现在不知道怎么做。
因此,首先,您可能只想说明:
def fooBar = Foo.find("from Foo f left join f.bars b where b.value=:value",
[value:value])
def foo = fooBar[0]
assert foo instanceof Foo
编辑:请注意,对于一对一关联,可以使用“dotty”语法,即,
from Foo foo where foo.baz.value=:value