【发布时间】:2021-08-05 11:45:56
【问题描述】:
在我使用 gorm 作为 ORM 和 posgress 作为数据库的 golang 项目中,在某些情况下,当我开始事务时 更改三个表并提交,仅更改其中一个表。另外两个表数据没有变化。 知道它是怎么发生的吗?
你可以看下面的例子
o := *gorm.DB
tx := o.Begin()
invoice.Number = 1
err := tx.Save(&invoice)
if err != nil {
err2 := tx.RollBack().Error()
return err
}
receipt.Ref = "1331"
err = tx.Save(&receipt)
if err != nil {
err2 := tx.RollBack().Error()
return err
}
payment.status = "succeed"
err = tx.Save(&payment)
if err != nil {
err2 := tx.RollBack().Error()
return err
}
err = tx.Commit()
if err != nil {
err2 := tx.Rollback()
return err
}
只是付款数据发生了变化,我没有收到任何错误。
【问题讨论】:
-
第二行中的 tx 不是应该从 DB 创建的吗?喜欢
tx := o.Begin() -
是的,我应该在这里编辑...谢谢。
-
这段代码还能编译吗?您混合了 Rollback 和 RollBack,您将
tx.Error成员作为函数调用。每次保存后,您将tx.Save(*)分配给err,然后从函数中返回它,即使tx.Save返回与错误接口不兼容的*gorm.DB。
标签: postgresql go go-gorm