我正在使用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"
型
我不知道为什么交易会导致测试失败。任何帮助都将不胜感激。
1条答案
按热度按时间jaql4c8m1#
似乎你的
user
表与project_member
表有foreign key关系。因此从user
表中删除该行违反了约束,并抛出上述错误。您可以使用
ON DELETE CASCADE
配置外键约束(请参见此处)。如果您运行xml5n1x查询,将从user
表中删除该行沿着在project_member
中引用该行的行,