go-gorm / optimisticlock

optimistic lock plugin for gorm
MIT License
84 stars 18 forks source link

Updates 失效 #1

Closed 42thcoder closed 2 years ago

42thcoder commented 2 years ago

简化后的场景

model 定义

// Account 用户钱包
type Account struct {
    gorm.Model

    UserID *uint
    User   *User

    GoldAmount            decimal.Decimal        `gorm:"type:decimal(20,2)"`  //金币余额

    Version               optimisticlock.Version `gorm:"default:0"`
}

demo

var account Account
db.First(&account)

account.CostGold(decimal.NewFromFloat(100))
db.Updates(&account)

问题

未引入 Version 字段时, db.Updates(&account) 工作起来没问题, 也符合 DDD 的常见写法; 引入后报错:

sql: UPDATE `accounts` SET `gold_amount`='3400',`Model`='{47 2022-03-05 12:40:14.574 +0800 CST 2022-03-09 01:20:14.138 +0800 CST {0001-01-01 00:00:00 +0000 UTC false}}',`version`=`version`+1,`updated_at`='2022-03-09 01:20:14.182' WHERE `accounts`.`deleted_at` IS NULL AND `id` = 47

"error": "sql: converting argument $7 type: unsupported type gorm.Model, a struct"
icpd commented 2 years ago

Fixed. Please upgrade to the latest