我有一些圣杯域类,它们之间有这样的关系......
Domain A {
...
Domain B
}
Domain B {
...
Domain C
}
Domain C {
...
String name
String attr1
String attr2
}
如何使用withCriteria
对 A 执行预先获取,以便与A
相关的B and C
实例包含在我的结果中 这样。。。
List<A> aList = [..., B: [..., C: [... name: 'name', attr1: 'attr1', attr2: 'attr2']]]
你描述预期结果的方式很奇怪,我无法确切地说出你想要什么......
List<A> aList = [..., B: [..., C: [... name: 'name', attr1: 'attr1', attr2: 'attr2']]]
声明的aList
类型表明您需要一个List<A>
但您显示的值看起来像一个带有一些嵌套Map
s 的Map
。
如果您执行这样的查询...
def aList = A.withCriteria {
// your criteria goes here
}
从中返回的将是A
的List
,每个A
将引用一个B
,每个B
将引用一个C
。
def aList = A.withCriteria {
// your criteria goes here
}
for(A obj : aList) {
B b = obj.b
C c = b.c
// ...
}
我希望这有所帮助。
根据评论进行编辑:
目前还不清楚您是否希望它们总是被急切地获取,或者您是否想在表达查询时表达这一点。 听起来也许你想在表达查询时表达它,这可以像这样完成......
import import org.hibernate.FetchMode
// ...
A.withCriteria {
// criteria goes here
fetchMode "b", FetchMode.JOIN
fetchMode "b.c", FetchMode.JOIN
}