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 を呼び出すとすべてのバーが返されますが、これで問題ありません。ただし、この場合、someDate引数を使用してクエリを実行する必要があります。コレクションを熱心にフェッチする必要がありますが、これを行う方法がわかりません。私はこのようなことをしたいと思います:

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

ただし、事前にわからないため、値に何を入力すればよいかわかりません。または、より良い方法があるかどうかはわかりません。

4

1 に答える 1

1

親クラス内でリストをフィルタリングすると、非常に混乱します。のリストのサブセットしかないインスタンスfooを作成できた場合、他の問題の中でも特に、のようなものは奇妙な動作をします。foo.barsBarfoo.addToBars

プロパティでフィルタリングされたBar、特定のに属するsのセットを見つける必要があるだけの場合は、最初にクラスに対してクエリを実行する必要があります。FoosomeDateBar

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

また:

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

于 2013-03-20T18:43:01.250 に答える