千家信息网

golang gorm的Callbacks事务回滚对象怎么创建

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章主要介绍了golang gorm的Callbacks事务回滚对象怎么创建的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇golang gorm的Callbacks事
千家信息网最后更新 2025年01月19日golang gorm的Callbacks事务回滚对象怎么创建

这篇文章主要介绍了golang gorm的Callbacks事务回滚对象怎么创建的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇golang gorm的Callbacks事务回滚对象怎么创建文章都会有所收获,下面我们一起来看看吧。

1. Callbacks

您可以将回调方法定义为模型结构的指针,在创建,更新,查询,删除时将被调用,如果任何回调返回错误,gorm将停止未来操作并回滚所有更改。

1.1. 创建对象

创建过程中可用的回调

// begin transaction 开始事物BeforeSaveBeforeCreate// save before associations 保存前关联// update timestamp `CreatedAt`, `UpdatedAt` 更新`CreatedAt`, `UpdatedAt`时间戳// save self 保存自己// reload fields that have default value and its value is blank 重新加载具有默认值且其值为空的字段// save after associations 保存后关联AfterCreateAfterSave// commit or rollback transaction 提交或回滚事务

1.2. 更新对象

更新过程中可用的回调

// begin transaction 开始事物BeforeSaveBeforeUpdate// save before associations 保存前关联// update timestamp `UpdatedAt` 更新`UpdatedAt`时间戳// save self 保存自己// save after associations 保存后关联AfterUpdateAfterSave// commit or rollback transaction 提交或回滚事务

1.3. 删除对象

删除过程中可用的回调

// begin transaction 开始事物BeforeDelete// delete self 删除自己AfterDelete// commit or rollback transaction 提交或回滚事务

1.4. 查询对象

查询过程中可用的回调

// load data from database 从数据库加载数据// Preloading (edger loading) 预加载(加载)AfterFind

1.5. 回调示例

func (u *User) BeforeUpdate() (err error) {    if u.readonly() {        err = errors.New("read only user")    }    return}// 如果用户ID大于1000,则回滚插入func (u *User) AfterCreate() (err error) {    if (u.Id > 1000) {        err = errors.New("user id is already greater than 1000")    }    return}

gorm中的保存/删除操作正在事务中运行,因此在该事务中所做的更改不可见,除非提交。 如果要在回调中使用这些更改,则需要在同一事务中运行SQL。 所以你需要传递当前事务到回调,像这样:

func (u *User) AfterCreate(tx *gorm.DB) (err error) {    tx.Model(u).Update("role", "admin")    return}func (u *User) AfterCreate(scope *gorm.Scope) (err error) {  scope.DB().Model(u).Update("role", "admin")    return}

关于"golang gorm的Callbacks事务回滚对象怎么创建"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"golang gorm的Callbacks事务回滚对象怎么创建"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。

0