0

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

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", ?????)
    }
}

不过,我不确定要为该值添加什么,因为它不提前知道,或者是否有更好的方法来做到这一点?

4

1 回答 1

1

在父类中过滤列表会非常混乱。如果您设法创建了一个只有s列表子集的实例foo,那么除了其他问题外,还会出现奇怪的行为。foo.barsBarfoo.addToBars

如果您只需要查找Bar属于给定的 s集Foo,并按其属性过滤someDate,则应首先查询Bar该类:

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

或者:

Bar.findAll() {
    (foo.id == someId) && (someDate == dateVal)
}

等等

于 2013-03-20T18:43:01.250 回答