gpt4 book ai didi

nestjs/TypeOrm 数据库事务

转载 作者:行者123 更新时间:2023-12-03 17:50:23 27 4
gpt4 key购买 nike

假设我们有 2 个服务,A 和 B。
服务 A 具有执行以下操作的功能:

  • 验证数据
  • 调用服务 B 函数,对数据库进行更改
  • 多做点事
  • 对数据库进行更改

  • 现在,让我们假设以下步骤 3 或 4 之一失败。
    由于服务 B 在数据库中进行了更改,因此这些更改仍然存在。

    在这种情况下,有没有办法回滚数据库?我虽然是关于数据库事务的,但是我在 nest js 中找不到任何方法来做到这一点,尽管 TypeOrm 支持它,但嵌套看起来并不自然。
    如果没有,我现在“卡住”了服务 B 发生的更改,但没有更改应该由 A 发生。

    非常感谢。

    最佳答案

    有很多解决方案,它们应该都是基于SQL事务管理的。

    我个人觉得实现这一点的最简单方法是使用相同的 EntityManager在数据库上执行代码时的实例。然后你可以使用类似的东西:

    getConnection().transaction(entityManager -> {
    service1.doStuff1(entityManager);
    service2.doStuff2(entityManager);
    });

    你可以生成一个 QueryRunner来自 EntityManager如果您在 ORM 操作之外执行原始 SQL,则该实例将被包装在同一个事务中。您还需要生成 Repository来自 EntityManager 的实例否则他们将在主事务之外执行代码。

    关于nestjs/TypeOrm 数据库事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53680665/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com