GORM mongodb отображение в существующую структуру коллекции - PullRequest
3 голосов
/ 25 октября 2011

Я новичок в Grails & GORM, так что это может быть быстрый вопрос. В настоящее время мы рассматриваем возможность использования поддержки GORM Монго, и у меня есть несколько проблем, связанных с существующими данными сбора. Я в основном хочу отобразить иерархическую структуру объектов, в которой мой объект "Торговец" имеет ссылку на другого родительского торговца. Структура BSON довольно проста, т.е.

{
   name: "name",
   parent_id: ObjectId("[Object Id ref]")
}

В моей модели я попытался отобразить это соотношение следующим образом:

class Merchant {
    ObjectId id
    String name
    Merchant parent

    static belongsTo = [parent: Merchant]
    static mappedBy = [parent: "parentId"]

    static mapping = {
        collection  "merchants"
    }
    static constraints = {
    }
}

Это привело к следующему BSON:

{
        "_id" : ObjectId("4ea6be91ce5f56cd49f43ab8"),
        "name" : "where will you g",
        "version" : NumberLong(1),
        "parent" : {
                "$ref" : "merchants",
                "$id" : ObjectId("4ea6be91ce5f56cd49f43ab8")
        }
}

Это имеет две проблемы, а именно: - Имя родительского торгового поля "parent", а не "parent_id", что необходимо. - Значение родительского поля имеет дополнительную метаинформацию, кроме идентификатора в т. Е. $ Ref: "merchants".

Есть ли в любом случае я могу сохранить нашу существующую структуру BSON и по-прежнему иметь богатое сопоставление объектов.

Ура, Крис.

1 Ответ

0 голосов
/ 09 августа 2013

Для двух выпусков вам нужно дополнительное отображение:

static mapping = {
    collection 'merchants'
    parent attr:'parent_id', reference:false
}

Вам также следует удалить блок mappedBy, так как он вам нужен, только когда есть несколько полей одного типа.

Наконец, обратите внимание, что ссылка: false по умолчанию в последних версиях плагина (я думаю, 1.2+). Обратите внимание, что в других вариантах GORM 'attr' называется 'columnName'.

...