diff --git a/session_update.go b/session_update.go index 6e9d1168..4e0f656d 100644 --- a/session_update.go +++ b/session_update.go @@ -202,17 +202,19 @@ func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int6 table := session.statement.RefTable if session.statement.UseAutoTime && table != nil && table.Updated != "" { - colNames = append(colNames, session.engine.Quote(table.Updated)+" = ?") - col := table.UpdatedColumn() - val, t := session.engine.NowTime2(col.SQLType.Name) - args = append(args, val) + if _, ok := session.statement.columnMap[strings.ToLower(table.Updated)]; !ok { + colNames = append(colNames, session.engine.Quote(table.Updated)+" = ?") + col := table.UpdatedColumn() + val, t := session.engine.NowTime2(col.SQLType.Name) + args = append(args, val) - var colName = col.Name - if isStruct { - session.afterClosures = append(session.afterClosures, func(bean interface{}) { - col := table.GetColumn(colName) - setColumnTime(bean, col, t) - }) + var colName = col.Name + if isStruct { + session.afterClosures = append(session.afterClosures, func(bean interface{}) { + col := table.GetColumn(colName) + setColumnTime(bean, col, t) + }) + } } } diff --git a/session_update_test.go b/session_update_test.go index 44c3fa0e..e97963d3 100644 --- a/session_update_test.go +++ b/session_update_test.go @@ -1153,3 +1153,20 @@ func TestNewUpdate(t *testing.T) { assert.NoError(t, err) assert.EqualValues(t, 0, af) } + +func TestUpdateUpdate(t *testing.T) { + assert.NoError(t, prepareEngine()) + + type PublicKeyUpdate struct { + Id int64 + UpdatedUnix int64 `xorm:"updated"` + } + + assertSync(t, new(PublicKeyUpdate)) + + cnt, err := testEngine.ID(1).Cols("updated_unix").Update(&PublicKeyUpdate{ + UpdatedUnix: time.Now().Unix(), + }) + assert.NoError(t, err) + assert.EqualValues(t, 0, cnt) +}