Tôi đang cố gắng sử dụng findOrCreateBy
để tìm kiếm một đối tượng hoặc khởi tạo một đối tượng nếu tôi không thể tìm thấy đối tượng phù hợp, nhưng nó không hoạt động như tôi mong đợi.findOrCreateBy có hoạt động với các phiên bản miền khác không?
Đây là những gì tôi có:
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
Tôi đang làm gì sai? Tại sao fooType
không được đặt đúng cách? Đây có phải là hành vi mong đợi hay đây là lỗi trong Grails?
Vâng, nó có thể là ngớ ngẩn nhưng vì cơ sở dữ liệu của bạn là trống rỗng, FooType.findByName ("lớn") sẽ trả về null, phải không? Và sau đó bạn tạo một đối tượng truyền thuộc tính null này. Vì vậy, yeah, myFoo.fooType phải thực sự là null trong trường hợp này. –
@TiagoFarias, tôi đã cập nhật câu hỏi chính xác hơn vào thời điểm này. Các FooTypes được bootstrapped vào DB, do đó, nó không thực sự trống rỗng, nhưng không có đối tượng Foo trong DB. Khi 'findOrCreate *' được gọi, 'myFooType' là một cá thể tồn tại của' FooType'. – cdeszaq