如何使用多对多关系进行更新

I'm facing a difficulty with the go orm gorm:

I have a structure like this:

type Data struct {
  gorm.Model
  UserID   int `json:"user_id,omitempty"`
  AnswerID int `json:"answer_id,omitempty"`
  Entities []Entity `gorm:"many2many:data_entities;"`
}

type Entity struct {
  gorm.Model
  Name string
}

And now, either if I do:

db.Model(&data).Where(Data{AnswerID: data.AnswerID}).Assign(&data).FirstOrCreate(&data)

Or

db.Model(&data).Where(Data{AnswerID: d.AnswerID}).Update(&data)

My many-to-many fields aren't updated but created... Leading to duplications if already exists.

If I try to play with the Related() function, it simply stop updating the foreign field.

Is there a way to update or create properly every tables linked?

So far the only I found is this one:

db.Table("entities").
    Where(
        "id in (?)",
        db.Table("data_entities").
            Select("entity_id").
            Where(
                "data_id = ?",
                data.ID,
            ).
            QueryExpr(),
    ).
    Where("entity_name = ?", *entityName).
    Update(&data.Entity)

But I found 2 problems here:

1) Impossible to do a deeper subrequest:

Select("entity_id").
    Where(
        "data_id = ?",
        data.ID,
    )...

Won't work if instead of data.ID I want to go deeper with an other sub-request. 2) in case of multiple many-2-many I assume I would need to duplicate the query.

I do it like this:

To update your data just pass a struct with only the fields you wanna update:

db.Model(&data).Updates(Data{UserID: 2, AnswerID: 2})

and to add new entities:

db.Model(&data).Association("Entities").Append([]*Entity{&Entity{Name: "mynewentity"}})