提交事务后的验证错误

编程入门 行业动态 更新时间:2024-10-10 15:24:23

提交事务后的验证<a href=https://www.elefans.com/category/jswz/34/1771449.html style=错误"/>

提交事务后的验证错误

我正在使用将Sequelize 5.21.5和MySql 5.5用作数据库引擎的节点项目。

我有一种将值插入到链接表中的方法,该链接表用于多对多关系。链接表上有一个唯一约束,指示两个id字段的组合必须唯一。

我希望能够将多个条目同时插入到user_levels表中。我尝试通过使用序列化事务来执行此操作。我首先添加一个userLevel,其userId为1,levelId为9(尚不存在),然后添加另一个userLevel为1,levelId为8(确实存在)。

我希望事务失败并回滚,但是事务已提交,并且仅添加了levelId为9的userLevel并抛出了对于levelId为8的userLevel的验证错误。

如何使交易整体失败并使其回滚?

  updateLevelsForUser = async (req: Request, res: Response): Promise<any> => {
    const userId: number = parseInt(req.params.userId, 10);
    const levelIds: number[] = [9, 8];

    Database.getInstance().sequelize.transaction(async (t) => {
      for (let i = 0; i < levelIds.length; i += 1) {
        UserLevel.create<UserLevel>(
          {
            userId,
            levelId: levelIds[i],
          },
          { transaction: t },
        );
      }
    });
  };

输出:

Executing (0efdccac-6d93-4434-8ac4-1ff291d65178): START TRANSACTION;
Executing (0efdccac-6d93-4434-8ac4-1ff291d65178): INSERT INTO `user_levels` (`id`,`userId`,`levelId`) VALUES (DEFAULT,?,?);
Executing (0efdccac-6d93-4434-8ac4-1ff291d65178): INSERT INTO `user_levels` (`id`,`userId`,`levelId`) VALUES (DEFAULT,?,?);
Executing (0efdccac-6d93-4434-8ac4-1ff291d65178): COMMIT;
Unhandled rejection SequelizeUniqueConstraintError: Validation error
回答如下:

您忘记在UserLevel.create之前添加await

Database.getInstance().sequelize.transaction(async (t) => {
      for (let i = 0; i < levelIds.length; i += 1) {
        await UserLevel.create<UserLevel>(
          {
            userId,
            levelId: levelIds[i],
          },
          { transaction: t },
        );
      }
    });

更多推荐

提交事务后的验证错误

本文发布于:2024-05-07 15:53:51,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1757008.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:错误   事务

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!