0

我有一些 grails 域类,它们之间有这样的关系......

Domain A {
    ...
    Domain B
}

Domain B {
    ...
    Domain C
}

Domain C {
    ...
    String name
    String attr1
    String attr2
}

我如何使用withCriteria在 A 上执行急切获取,B and C以便相关的实例A包含在我的结果中,就像这样......

List<A> aList = [..., B: [..., C: [... name: 'name', attr1: 'attr1', attr2: 'attr2']]]
4

1 回答 1

0

您描述预期结果的方式很奇怪,我无法确切地说出您想要什么......

List<A> aList = [..., B: [..., C: [... name: 'name', attr1: 'attr1', attr2: 'attr2']]]

声明的类型aList建议您想要 a List<A>,但您显示的值看起来像Map带有一些嵌套Maps 的 a。

如果您执行这样的查询...

def aList = A.withCriteria {
    // your criteria goes here
}

从中返回的是 a Listof ,A并且 eachA将引用 aB并且 eachB将引用 a 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
    }
于 2018-04-30T23:14:10.683 回答