我試圖用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