我是Grails& 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:“商家”中的id之外的附加元信息。
无论如何,我可以保留现有的BSON结构并且仍然具有丰富的对象映射。
干杯,克里斯。
答案 0 :(得分:0)
对于这两个问题,您需要一个额外的映射:
static mapping = {
collection 'merchants'
parent attr:'parent_id', reference:false
}
您还应该删除mappedBy块,因为只有当存在多个相同类型的字段时才需要它。
最后,请注意,引用:false是最新版本插件的默认设置(我认为是1.2+)。请注意,'attr'在其他GORM风格中被命名为'columnName'。