3

私はこの単純なモデルを持っています:

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のiddateCreated、およびlastUpdatedフィールドを維持したいと考えています。だから私は次のことを試します:

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 }

ここで、dateCreated フィールドlastUpdateフィールドが Grails によって自動管理されていないことに気付きました。また、バージョンフィールドが追加されましたが、null値もありますが、興味深いことに、_idフィールドは作成されませんでした ( Infoクラスでidを定義したとしても)。

2 番目のシナリオでは、これを試します。

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プロパティがなく、なぜdateCreatedlastUpdated、およびversionnullなのですか? これはこのように動作することを意図したものですか、それともバグですか?

ありがとうございました、

4

1 に答える 1

-1

これはおそらく、grails フレームワークが変換を行う方法 (GORM モジュール) によるものです。grails フォーラムから、より迅速で適切な回答が得られる場合があります。基本的に、一部の自動動作 (日付と objectid の入力) は、サブオブジェクトではなく、ルート オブジェクトに対してのみ行われるようです。morphia に基づく代替 ORM をチェックアウトすることもできます: http://www.grails.org/plugin/mongodb-morphia

于 2011-12-03T01:17:16.303 に答える