Grails 2.4.4 Пример карты объектов не сохраняется в базе данных Mongo

Я следовал документации Grails 2.4.4, чтобы создать карту объектов, но мои объекты не сохранялись в Mongo DB. Итак, я решил провести проверку работоспособности на точно таком же примере, представленном в документации, и это тоже не сработало.

Шаги:

Тест Grails для создания приложений

Затем я включил плагин mongo в свой BuilConfig.groovy:

compile ":mongodb:3.0.3"
//runtime ":hibernate4:4.3.6.1"

Затем я настроил свой DataSource.groovy:

environments {
    production {
        grails {
            mongo {
                replicaSet = [ "xxxxxxxx"]
                username = "xxxx"
                password= "xxxxxxxxxxxxxx"
                databaseName = "xxxxxx"
            }
        }
    }
    development {
        grails {
            mongo {
                replicaSet = [ "xxxxxxxx"]
                username = "xxxx"
                password= "xxxxxxxxxxxxxx"
                databaseName = "xxxxxx"
            }
        }
    }
    test {
        grails {
            mongo {
                replicaSet = [ "xxxxxxxx"]
                username = "xxxx"
                password= "xxxxxxxxxxxxxx"
                databaseName = "xxxxxx"
            }
        }
    }
}

Вот мой класс домена книги:

package test

class Book {

    String name
    Map authors
    static hasMany = [authors:Author]

    static constraints = {
    }
}

И вот мой класс домена Author:

package test

class Author {

    String name
    static constraints = {
    }
}

используя консоль Grails, я запустил следующий скрипт:

import test.*

def a = new Author(name:"Stephen King")

def book = new Book(name:"test")
book.authors = ["stephen":a]
book.save(failOnError:true)

А затем я взглянул на свою базу данных Mongo и не смог найти карту, которая должна была быть сохранена.

{
    "_id": 1,
    "name": "test",
    "version": 0
}

Я очень ценю, если у вас есть какие-либо сведения о том, что происходит, или если вы знаете какой-либо обходной путь для сохранения Mapin Grails.

Спасибо


person Pargles    schedule 28.07.2016    source источник


Ответы (1)


Ну вот. Добавьте следующее в свой класс домена Book:

static embedded = ["authors"]

Во-вторых, почему вы используете Map вместо List для authors?

Поскольку это база данных MongoDB, она сохранит все поля Author.

person Shashank Agrawal    schedule 29.07.2016
comment
Спасибо @Shashank. Это всего лишь пример, предоставленный документацией, которую я буду использовать аналогичным образом. Встроенный компонент сохраняет весь объект, но мне нужна только ссылка на существующий объект. Это будет что-то вроде следующего: book: { "authors": { "awarded":2131, "acknowledged":324324, "mentioned": 6575234, } } - person Pargles; 29.07.2016