postgresql 添加事务后NestJS测试失败-外键约束冲突

nnvyjq4y  于 2024-01-07  发布在  PostgreSQL
关注(0)|答案(1)|浏览(159)

我正在使用TypeORM处理一个NestJS项目,我遇到了一个问题,在添加事务后测试失败。我得到的错误是在尝试向project_group表中插入新行时违反了外键约束。下面是错误消息:
QueryFailedError:在表“project_group”上插入或更新违反了外键约束“FK_a6e3f0560fc498dc3de01ee4250”
我在我的服务方法中使用typeorm-transactional-cls-hooked包中的runInTransaction函数,如下所示:

await runInTransaction(async () => {
  await RequestContext.impersonate(invite.user, async () => {
    await this.projectService.addProjectMember(
      project,
      invite.invitedEmail,
      invite.role
    );
  });
  await this.deleteInvite(invite);
});

字符串
下面是来自project.service.ts的addProjectMember方法:

async addProjectMember(
  project: ProjectEntity,
  email: string,
  role = ProjectRole.Member
) {
  // rest of the code
  const member = await this.projectMemberRepository.save(projectMember);
  // rest of the code
}


我已经检查了我传递给addProjectMember的ProjectUserEntity是否有一个有效的用户和一个有效的电子邮件。我还检查了我处理emailDomain并将其与projectId关联的逻辑。似乎没有问题导致使用无效的projectId。
我已经在TypeORM中启用了所有查询和错误的日志记录,我看到一些删除操作失败,但我没有看到任何回滚错误。下面是日志:

query: DELETE FROM "user"
query failed: DELETE FROM "user"
error: error: update or delete on table "user" violates foreign key constraint "FK_e7520163dafa7c1104fd672caad" on table "project_member"


我不知道为什么交易会导致测试失败。任何帮助都将不胜感激。

jaql4c8m

jaql4c8m1#

似乎你的user表与project_member表有foreign key关系。因此从user表中删除该行违反了约束,并抛出上述错误。
您可以使用ON DELETE CASCADE配置外键约束(请参见此处)。如果您运行xml5n1x查询,将从user表中删除该行沿着在project_member中引用该行的行,

相关问题