【问题标题】:Grails Mongodb Embedded Documents ?Bug?Grails Mongodb 嵌入式文档?错误?
【发布时间】:2012-01-11 03:34:15
【问题描述】:

我有这个简单的模型:

abstract class Info {
    ObjectId id
    Date dateCreated
    Date lastUpdated
}
class Question extends Info {
    String title
    String content
    List<Answer> answers = []
    static embedded = ['answers']
}
class Answer {
    String content
}

以这种方式编写,answer 嵌入在 question 中(并且没有为 answer 维护 id)。我想为每个 answer 维护 iddateCreatedlastUpdated 字段。所以我尝试以下方法:

class Answer extends Info {
    String content
}

当我运行一个简单的测试用例(保存一个带有 1 个答案的问题)时,我得到以下信息:

> db.question.find()
{ "_id" : ObjectId("4ed81d47e4b0777d795ce3c4"), "answers" : [ { "content" : "its very 
cool", "dateCreated" : null, "lastUpdated" : null,  "version" : null } ], "content" : 
"whats up with mongodb?", "dateCreated" : ISODate("2011-12-02T00:35:19.303Z"), 
"lastUpdated" : ISODate("2011-12-02T00:35:19.303Z"), "title" : "first question", 
"version" : 0 }

我注意到,dateCreatedlastUpdate 字段不是由 Grails 自动维护的。还添加了 version 字段,但也有一个 null 值,但有趣的是没有创建 _id 字段(即使我在 Info 类中定义了 id

在第二种情况下,我试试这个:

class Answer {
    ObjectId id
    String content
}

我得到以下输出:

> db.question.find()
{ "_id" : ObjectId("4ed81c30e4b076cb80ec947d"), "answers" : [ { "content" : "its very 
cool" } ], "content" : "whats up with mongodb?", "dateCreated" : ISODate("2011-12-
02T00:30:40.233Z"), "lastUpdated" : ISODate("2011-12-02T00:30:40.233Z"), "title" : 
"first question", "version" : 0 }

这一次,id 也没有为嵌入文档创建。对这种情况有什么解释吗?为什么没有 id 属性,以及为什么 dateCreatedlastUpdatedversion?这是打算以这种方式工作,还是一个错误?

谢谢,

【问题讨论】:

  • 您能否发布指向 Grails 论坛上发布的问题主题的链接?您的问题得到解决了吗?
  • 我也在想同样的事情!你得到答案了吗?

标签: grails mongodb grails-orm grails-plugin gorm-mongodb


【解决方案1】:

这可能是由于 grails 框架如何进行转换(GORM 模块)。 您可能会从 grails 论坛获得更快/更好的答案。 基本上,似乎某些自动行为(填写日期和 objectid)仅针对根对象,而不是子对象。 您还可以签出基于 morphia 的替代 ORM: http://www.grails.org/plugin/mongodb-morphia

【讨论】:

  • 我见过基于 morphia 的 ORM,但我宁愿坚持使用 Springsource 赞助的那个。我将在 grails 论坛上发帖,感谢您指出这一点。
猜你喜欢
  • 1970-01-01
  • 2012-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-15
  • 2013-08-20
  • 2015-02-06
  • 1970-01-01
相关资源
最近更新 更多