findOrCreateBy
を使用して、オブジェクトを検索したり、一致するものが見つからない場合はインスタンス化したりしようとしていますが、期待通りに動作しません。findOrCreateByは他のドメインインスタンスと連携しますか?
これは私が持っているものです。
String myBaz = "some unique string"
FooType myFooType = FooType.findByName("Large")
// The Foo table is empty, so this should give me a new Foo
Foo myFoo = Foo.findOrCreateByBazAndFooType(myBaz, myFooType)
assert myFoo.baz == myBaz
assert myFoo.fooType == myFooType // Fails because myFoo.fooType is null,
// but should be set to myFooType
私が間違って何をしているのですか? fooType
が正しく設定されていないのはなぜですか?これは予想される動作ですか、これはGrailsのバグですか?
まあを助けるかもしれない、それは愚かなことかもしれませんが、あなたのデータベースが空であることから、FooType.findByName(「大」)は右、nullを返しますか?その後、このnull属性を渡すオブジェクトを作成します。だから、ええ、myFoo.fooTypeはこの場合実際にはnullでなければなりません。 –
@TiagoFarias、私はこの点をより正確にするために質問を更新しました。 FooTypesはDBにブートストラップされているため、実際には空ではありませんが、FooオブジェクトはDBにありません。 'findOrCreate *'が呼ばれると、 'myFooType'は' FooType'の永続化されたインスタンスです。 – cdeszaq