iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >Gorm 事务错误 error = 事务已提交或回滚
  • 493
分享到

Gorm 事务错误 error = 事务已提交或回滚

2024-02-11 05:02:03 493人浏览 泡泡鱼
摘要

PHP小编柚子在这篇文章中将为大家介绍一个常见的错误信息:“GORM 事务错误 error = 事务已提交或回滚”。在使用Gorm进行数据库操作时,有时候会遇到这个错误,让人困惑不解。

PHP小编柚子在这篇文章中将为大家介绍一个常见的错误信息:“GORM 事务错误 error = 事务已提交或回滚”。在使用Gorm进行数据库操作时,有时候会遇到这个错误,让人困惑不解。本文将详细解释这个错误的原因以及可能的解决方案,帮助读者解决这个问题,顺利进行数据库操作。

问题内容

我的目标是在下面的代码中进行事务管理。如果其中一项策略出现错误,我会尝试回滚。在测试代​​码时,我注意到如果回滚或提交命令运行一次,它会给出错误=事务已被提交或回滚第二次。如何解决此错误?

func (d *DistributeService) Distribute(vehicleNumberPlate string, request model.DistributeRequest) (*model.DistributeResponse, error) {
    var response model.DistributeResponse
    response.Vehicle = vehicleNumberPlate
    var routeList []model.RouteResponse
    tx := d.repo.BeginTransaction()
    for _, routes := range request.RouteRequest {
        var routeResponse model.RouteResponse
        strategy, isStrategyExists := d.strategies[routes.DeliveryPoint]
        if isStrategyExists {
            resp, err := strategy.Distribute(routes.Deliveries, vehicleNumberPlate, tx)
            if err != nil {
                tx.Rollback()
                logrus.Errorf("Error while distributing: %v", err)
                return nil, err
            }
            routeResponse.DeliveryPoint = routes.DeliveryPoint
            routeResponse.Deliveries = *resp
            routeList = append(routeList, routeResponse)
        } else {
            logrus.Errorf("Invalid delivery point: %v", routes.DeliveryPoint)
            return nil, errors.New("invalid delivery point")
        }
    }
    response.RouteResponse = routeList
    err := d.checkSackPackagesAreUnloaded()
    tx.Commit()
    if err != nil {
        return nil, err
    }
    return &response, nil
}

解决方法

您可能在每次调用中使用相同的事务对象。 如果它被关闭一次 - 无论出于何种原因 - 您需要创建一个新的事务对象。

为什么我说您可能使用您询问的相同事务对象? 因为您基本上将指针传递给 d *DistributeService。 然后使用 tx := d.repo.BeginTransaction()。我们无法判断该代码的作用,但我很确定您将在此处返回相同的事务对象以供后续运行。

解决方案是每次调用此方法时创建一个新的事务对象,例如使用 tx := db.Begin(),如 文档 中所述。

以上就是Gorm 事务错误 error = 事务已提交或回滚的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: Gorm 事务错误 error = 事务已提交或回滚

本文链接: https://www.lsjlt.com/news/563355.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作