如何使用 createCriteria 在 Grails 中执行深度查询



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

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
}

从中返回的将是AList,每个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
    }

相关内容

  • 没有找到相关文章

最新更新