如何在TypeORM WIth NestJS中使用主键而不是实体来定义关系



我使用的是NestJS+TypeORM,有两个实体如下所示:

export class User {
@PrimaryColumn()
UserID: number;
@Column()
UserName: string;
@OneToOne(() => Blog)
@JoinColumn()
Blog: Blog;
}
export class Blog {
@PrimaryColumn()
BlogID: number;

@Column()
BlogName: string;
}

当消费者发送创建用户的请求时,如下所示,请求中包含BlogID:

userRequest = {
"UserID": 1,
"UserName": "me",
"BlogID": 12
}

在后端,我无法执行userRepository.create(userRequest(,我必须将请求中发送的BlogID转换为实际的Blog实体对象,以便typeorm能够处理此问题。现在,我能想到的唯一方法是注入博客存储库并执行:

userEntity = {
"UserID": userRequest.UserID
"UserName": userRequest.UserName
"Blog": await this.blogRepository.findOneBy({
BlogID: userRequest.BlogID
})

最后做:

userRepository.create(userEntity)

我的主要问题是:有没有一种方法可以在不将博客存储库注入用户服务的情况下做到这一点?出现的问题是,我还实现了一个功能,要求我将用户存储库注入博客服务,这会创建一个循环依赖关系。NestJS要求应该不惜一切代价避免循环依赖,但我不认为我试图通过实现这一点来做任何编程上的坏做法。如果我能在不引入循环依赖的情况下实现这一点,我会的。我相信阻止我这么做的主要原因是我需要将实体的存储库导入到相邻服务的服务中。有什么建议吗?

userEntity = {
"UserID": userRequest.UserID
"UserName": userRequest.UserName
"Blog": {id: userRequest.BlogId}
}

将userRequest.BlogId作为userEntity.Blog.id 传递

如下更新您的关系:

@OneToOne(((=>博客(

@JoinColumn({name:"blogId"}(

博客:博客;

最新更新