GoのWeb開発でBeegoというフレームワークのormというORマッパを使用しています。そこで以下のモデルとハンドラを作成し、テストとして以下のリクエストをポストしました。しかし、データベースを調べてみるとHighThumbnailとMediumThumbnail以外はちゃんと記録されますが、その2つが登録されません。なぜでしょうか。

model

// Video is model of YouTube videos.
type Video struct {
    Id              int        `json:"id"`
    VideoId         string     `json:"videoId,omitempty" orm:"unique"`
    Title           string     `json:"title,omitempty"`
    Artist          string     `json:"artist,omitempty" orm:"null"`
    HighThumbnail   *Thumbnail `json:"highThumbnail,omitempty" orm:"rel(one);null"`
    MediumThumbnail *Thumbnail `json:"mediumThumbnail,omitempty" orm:"rel(one);null"`
    PublishedDate   time.Time  `json:"publishedDate,omitempty" orm:"null"`
    Created         time.Time  `json:"created" orm:"auto_now_add;type(datetime);null"`
    Updated         time.Time  `json:"updated" orm:"auto_now;type(datetime);null"`
    Liked           int        `json:"liked,omitempty"`
}

// Thumbnail is model of thumbnail of Video.
type Thumbnail struct {
    Id     int    `json:"id"`
    URL    string `json:"url,omitempty" orm:"null"`
    Width  int    `json:"width,omitempty" orm:"null"`
    Height int    `json:"height,omitempty" orm:"null"`
}

ハンドラ

//LikeをPOSTする関数。もし動画がなければ作成する。
func likeUpdate(w http.ResponseWriter, r *http.Request) {
    o := orm.NewOrm()

    body, err := ioutil.ReadAll(io.LimitReader(r.Body, 1048576))
    checkError(w, err)
    if err := r.Body.Close(); err != nil {
        w.WriteHeader(400)
        utils.CheckError(w, err)
    }

    w = utils.SetJSONHeader(w)

    var video Video

    //jsonをパース
    if err := json.Unmarshal(body, &video); err != nil {
        w.WriteHeader(422)
        if err := json.NewEncoder(w).Encode(err); err != nil {
            utils.CheckError(w, err)
        }
    }

    //DBに保存
    if _, _, err := o.ReadOrCreate(&video, "videoId"); err == nil {
        video.Liked = video.Liked + 1
        if _, err := o.Update(&video); err == nil {
            w.WriteHeader(200)
            response, err := json.Marshal(video)
            utils.CheckError(w, err)
            fmt.Fprintln(w, string(response))
        }
    }
}

リクエスト

curl -H "Content-Type: application/json" -d '{"title": "USFIV: Liquid NuckleDu vs Ai Ai - Evo 2015 - CPT 2131231", "highThumbnail":{"url":"url"}, "mediumThumbnail":{"url":"url"}, "videoId":"KU-jkDdwwwwwwq"}' http://localhost:9000/like

レスポンスはつぎのようになります。

レスポンス

{"id":8,"videoId":"KU-jkDdww","title":"USFIV: Liquid NuckleDu vs Ai Ai - Evo 2015 - CPT 2131231","highThumbnail":{"id":0,"url":"url"},"mediumThumbnail":{"id":0,"url":"url"},"publishedDate":"0001-01-01T00:00:00Z","created":"2015-07-19T18:48:39.650451031+09:00","updated":"2015-07-19T18:48:39.656141005+09:00","liked":1}