GORM急切地用标准获取集合

时间:2013-03-19 23:17:35

标签: grails join groovy criteria eager-loading

我有一个简单的一对多关联:

class Foo {
    int id
    Date someDate

    static hasMany = [
        bars: Bar
    ]
}

class Bar {
    Foo foo
    Date someDate

    static mapping = {
        .....
        columns {
            foo([:]) {
                column name: "id"
            }
        }
    }
}

在正常情况下,调用foo.bars将返回所有Bars,这很好。但在这种情况下,我需要使用someDate参数进行查询。我需要急切地获取该集合,但我不知道该怎么做。我想做这样的事情:

Foo.withCriteria {
    eq("id", someId)
    bars {
        eq("someDate", ?????)
    }
}

我不确定要为这个价值投入什么,因为它不是提前知道的,或者是否有更好的方法可以做到这一点?

1 个答案:

答案 0 :(得分:1)

过滤父类中的列表会非常混乱。如果您设法创建一个实例foo,其中foo.bars只有Bar列表的子集,那么像foo.addToBars之类的内容会有奇怪的行为,以及其他问题。< / p>

如果您只需要查找属于给定Bar的{​​{1}}集合,并按其Foo属性进行过滤,则应该查询someDate开始的课程:

Bar

或:

Bar.findAllByFooAndSomeDate(foo, dateVal)
Bar.findAllByFooAndSomeDateBetween(foo, startDate, endDate)