Grails MongoDB プラグインを使用して、埋め込まれたドキュメント/オブジェクトのリストを MongoDB に保存する際に問題が発生しています。第 3 章のドキュメントに記載されている情報を使用しましたが、1 つのオブジェクトの埋め込みしか機能しませんでした。
テスト目的で、新しい Grails プロジェクトに 2 つのドメイン オブジェクト Person と Address を作成しました。それらは次のようになります。
class Person {
ObjectId id
String firstName
String lastName
Address address
List otherAddresses = []
static embedded = ['address', 'otherAddresses']
}
class Address {
String street
String postCode
String city
}
Bootstrap.groovy で次の行を実行すると、MongoDB に 2 つの Person オブジェクトが格納されます。どちらも正しいアドレスを持っていますが、person1 の otherAddresses リストは "[ null ]" で、person2 の otherAddresses リストは "[ { "street" : " です。 2つ目の通り。164"、"都市": "ニューヨーク"、"郵便番号": "13579"}]"
def address = new Address(street: "Mainstreet. 164", city: "New York", postCode:"12345")
def person1 = new Person(firstName: "John", lastName: "Doe")
person1.address = address
person1.otherAddresses.add(address)
println person1.otherAddresses // Result: "[mongoembeddedlisttest.Address : (unsaved)]"
person1.save()
person1.errors.allErrors.each { println it } // no errors
def person2 = new Person(firstName: "Jane", lastName: "Doe")
person2.otherAddresses += ['street': 'Second Street. 164', 'city': 'New York', 'postCode':'13579']
println person2.otherAddresses // Result: "[[street:Second Street. 164, city:New York, postCode:13579]]"
person2.save()
結果のデータベース エントリ:
{ "_id" : { "$oid" : "521089461a150b20390d61c2"} , "address" : { "city" : "New York" , "postCode" : "12345" , "street" : "Mainstreet. 164"} , "firstName" : "John" , "lastName" : "Doe" , "otherAddresses" : [ null ] , "version" : 0}
{ "_id" : { "$oid" : "521089461a150b20390d61c3"} , "firstName" : "Jane" , "lastName" : "Doe" , "otherAddresses" : [ { "street" : "Second Street. 164" , "city" : "New York" , "postCode" : "13579"}] , "version" : 0}
その他の注記:
私は純粋なmongodbアプローチを使用しています(Hibernateとのハイブリッドではありません)
私はmongo db 2.4.4を実行しているGrails 2.2.1を使用してWindows 8マシンで作業しています
Person は /grails-app/domain のドメイン オブジェクトであり、Address は /src/groovy の「通常の」groovy クラスです (ドメイン フォルダーに配置できますが、効果はありません)。
Config.groovy ではすべてが null 許容に設定されています: grails.gorm.default.constraints = { '*'(nullable: true) }
BuildConfig.groovy にはプラグイン エントリがあります: compile ":mongodb:1.3.0"
私は何を間違っていますか?Grails メカニズムを使用して埋め込みオブジェクトのリストを保存するにはどうすればよいですか?