0

参考までに、これにもっと良いタイトルを提案してください。次のドメイン モデルがあります (これを制御することはできません)。

class Foo {
    int id
    String baz
    Date someDate
    static hasMany = [bars:Bar]
    static mapping = {
        id composite: [ "id", "baz" ]
    }
}

class Bar {
    int id
    String baz
    Date someDate
    Foo foo
    static mapping = {
        id composite: ["id", "baz", "someDate"]
        columns {
            foo([:]) {
                column name: "id"
                column name: "baz"
            }
        }
    }
}

私の問題は、Foos のリストがあり、Foo.someDate == Bar.someDate であるすべてのバーを見つける必要がありますが、各 Foo のクエリではなく 1 つのクエリでのみ、遅延読み込みが含まれていないことです。また、バーを熱心なフェッチに設定することはオプションではありません。

たとえば、これが私のデータの場合 (疑似コード、簡単にするために id と baz を単に "id" に結合しています):

[
    Foo (someDate:4/1/2013)
        |___ bars: [{someDate:12/4/2012, id:1}, {someDate:4/1/2013, id:2}]
    Foo (someDate:5/10/2012)
        |___ bars: [{someDate:{4/1/2013, id:3}
    Foo (someDate:3/3/2013)
        |___ bars: [{someDate:3/3/2013, id:4}, {someDate:9/5/2013, id:5}]
]

ID が 2 と 4 のバーを 1 つのクエリで返す必要があります。これにアプローチする方法が本当にわかりません。

必要に応じて HQL にすることもできますが、GORM クエリにすることをお勧めします。

4

2 に答える 2

1

これを試して:

Bar.executeQuery("select b from Bar b join b.foo as f where b.someDate = f.someDate and f in :fooList", [fooList: fooList])
于 2013-07-02T18:48:46.677 に答える