#grails #mongodb #grails-orm
#grails #mongodb #grails-orm
Вопрос:
Я новичок в Grails amp; GORM, так что это может быть быстрый вопрос. В настоящее время мы рассматриваем возможность использования поддержки GORMs mongo, и у меня возникает несколько проблем с сопоставлением существующих данных коллекции. Я в основном хочу сопоставить иерархическую структуру объектов, в которой мой объект «Продавец» имеет ссылку на другого родительского продавца. Структура 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: «торговцы».
В любом случае я могу сохранить нашу существующую структуру BSON и при этом иметь расширенное отображение объектов.
Приветствую, Крис.
Комментарии:
1. Похоже, вы можете решить часть проблем, присвоив
parent_id
«столбцу» имя: grails.org/doc/latest/guide/GORM.html#tableAndColumnNames Кроме того, возможно, вы не хотите использовать mappedBy или указывать коллекцию. Возможно, это действительно должно бытьtable 'merchants'
не collection. Не уверен на 100% во всем этом.
Ответ №1:
Для двух проблем вам необходимо дополнительное сопоставление:
static mapping = {
collection 'merchants'
parent attr:'parent_id', reference:false
}
Вы также должны удалить блок mappedBy, поскольку он вам нужен только при наличии нескольких полей одного и того же типа.
Наконец, обратите внимание, что reference:false является значением по умолчанию в последних версиях плагина (я думаю, 1.2 ). Обратите внимание, что ‘attr’ называется ‘ColumnName’ в других версиях GORM.