У меня возникли проблемы с хранением списков встроенных документов/объектов в MongoDB с использованием плагина Grails MongoDB. Я использовал информацию, указанную в documentation в главе 3, но получил только вложение одного объекта.Как хранить списки встроенных документов с помощью MongoDB под Grails?
Для целей тестирования я создал два объекта домена Person и Address в новом проекте Grails. Они выглядят так:
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 он хранит два объекта Person в MongoDB - оба имеют правильный адрес, но в person1 Перечень otherAddresses является «[пустой]» и в person2 в списке другихAddresses «[{« улица »:« Вторая улица ». 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)
Я работаю над машиной Windows 8 используя Grails 2.2.1 running mongo db 2.4.4
Лицо является объектом домена в/grails-app/domain и адресом является «нормальным» класс groovy в/src/groovy (я могу поместить его в папку домена но это не имеет никакого эффекта)
Все готово быть обнуляемым в Config.groovy: grails.gorm.default.constraints = { '*' (обнуляемым: правда)}
BuildConfig.groovy имеет плагин: компиляция ": mongodb: 1.3.0"
Что я делаю неправильно? Как сохранить список внедренных объектов с помощью механизма Grails?