全书目录

第二十四篇:TypeORM 完全指南 —— 数据映射施工队宇宙

第八章:事务 —— 封闭施工,一次联动验收

1 分钟 212 字 第 440 / 962 个阅读单元

真实业务里,有些动作不能做一半。

例如:

  • 创建订单,同时扣库存
  • 发布文章,同时写审计日志
  • 转账时,同时扣减 A、增加 B

这就是事务的舞台。

在施工队宇宙里,事务可以理解为:

把某块施工区域暂时封闭,只允许这批操作要么全部验收通过,要么全部回滚。

ts
await dataSource.transaction(async (manager) => {
  const post = manager.create(Post, {
    title: "TypeORM 事务不是魔法",
  });

  await manager.save(post);

  const log = manager.create(AuditLog, {
    action: "CREATE_POST",
    targetId: post.id,
  });

  await manager.save(log);
});
#事务最重要的一条铁律

进入事务以后,所有数据库操作都要用事务里提供的 manager。

不要这样:

ts
await dataSource.transaction(async (manager) => {
  await manager.save(post);
  await globalUserRepository.save(user); // 不要这样
});

正确心智是:

text
你既然进了封闭施工区,
就必须走封闭施工区里的专用调度员。

否则你以为在一个事务里,实际上有些操作已经跑到施工区外面去了。