From 391018c8b428ff93f95811a757ee2fbcd16f5d80 Mon Sep 17 00:00:00 2001 From: Qu Xuan Date: Wed, 18 Mar 2020 21:14:01 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E9=81=BF=E5=85=8Dupdate=E6=A0=87?= =?UTF-8?q?=E7=AD=BE=E5=A4=B1=E6=95=88=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/cloudcommon/db/metadata.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/pkg/cloudcommon/db/metadata.go b/pkg/cloudcommon/db/metadata.go index 83c088a79a..3ccebda39e 100644 --- a/pkg/cloudcommon/db/metadata.go +++ b/pkg/cloudcommon/db/metadata.go @@ -467,6 +467,7 @@ func (manager *SMetadataManager) SetValues(ctx context.Context, obj IModel, stor for key, value := range store { record := SMetadata{} + record.SetModelManager(manager, &record) err := manager.RawQuery().Equals("id", idStr).Equals("key", key).First(&record) //避免之前设置的tag被删除后再次设置时出现Duplicate entry error if err != nil { @@ -499,7 +500,17 @@ func (manager *SMetadataManager) SetValues(ctx context.Context, obj IModel, stor continue } - err = manager.TableSpec().InsertOrUpdate(&newRecord) + if len(record.Id) == 0 { + err = manager.TableSpec().InsertOrUpdate(&newRecord) + } else { + rV, rD := record.Value, record.Deleted + _, err = Update(&record, func() error { + record.Value = newRecord.Value + record.Deleted = newRecord.Deleted + return nil + }) + record.Value, record.Deleted = rV, rD + } if err != nil { return nil, errors.Wrapf(err, "InsertOrUpdate %s=%s", key, valStr) }