繁体   English   中英

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

[英]How do I perform Deep query in Grails using 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与一些嵌套的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
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM