我试图用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,对不对?然后你创建一个传递这个空属性的对象。所以,是的,在这种情况下,myFoo.fooType必须为真。 – 2012-07-17 17:09:50
@TiagoFarias,我更新了这个问题,在这一点上更正确。 FooType被引导到数据库中,所以它不是真的空,但是DB中没有Foo对象。当调用'findOrCreate *'时,'myFooType'是'FooType'的一个持久实例。 – cdeszaq 2012-07-17 17:15:25