如何拦截'回滚'在gorm?



我需要在所有创建执行失败后执行一些事情。

看起来可以满足callbacks,但是有一种情况,如果它是事务中的一个操作,它实际上可能不会被执行。我需要在rollbackTreat之后做相应的操作。问题是,如何拦截rollback?

您可以在这样的函数中使用手动事务。

func CreateAnimals(db *gorm.DB) error {
// Note the use of tx as the database handle once you are within a transaction
tx := db.Begin()
defer func() {
if r := recover(); r != nil {
tx.Rollback()
}
}()
if err := tx.Error; err != nil {
return err
}
if err := tx.Create(&Animal{Name: "Giraffe"}).Error; err != nil {
tx.Rollback()
return err
}
if err := tx.Create(&Animal{Name: "Lion"}).Error; err != nil {
tx.Rollback()
return err
}
return tx.Commit().Error
}

如果CreateAnimals失败,那么你可以做你想做的工作。

相关内容

  • 没有找到相关文章

最新更新