【发布时间】:2020-06-07 05:25:33
【问题描述】:
我有一个Project 实体,它有一个非自动生成的 id 字段和一个后继字段。这个继任者就是接下来的项目。但也许没有以下项目,所以这可能是空的。
@Entity()
export class Project extends BaseEntity {
@PrimaryColumn({ unique: true })
public id: string;
@OneToMany(() => Project, project => project.id, { nullable: true })
public successorId?: string;
}
通过创建新项目时
public createProject(id: string, successorId?: string): Promise<Project> {
const project: Project = new Project();
project.id = id;
project.successorId = successorId;
return project.save();
}
我需要处理多种情况。
-
传入一个已经存在的id:
这不会引发错误。它只是覆盖现有实体。
-
将
undefined传递给successorId:然后代码可以正常工作,但它不会创建带有
null的successorId列。该列根本不存在于数据库中。 -
为
id和successorId传递相同的ID(这应该是可能的):TypeORM 报错
TypeError: 无法读取未定义的属性“joinColumns”
-
传入另一个现有项目的
successorId:我遇到了和上面一样的错误
-
传入一个不存在的项目的
successorId:我遇到了和上面一样的错误
那么我该如何解决呢?我认为我的实体设计似乎是错误的。基本上应该是
- 一个项目可能有一个继任者
- 一个项目可以是许多项目的继任者
如果有人能帮忙就太好了!
更新
我也试过了
@OneToMany(() => Project, project => project.successorId, { nullable: true })
@Column()
public successorId?: string;
但每当我想调用 createProject 方法时,我都会收到此错误
QueryFailedError:“successorId”列中的空值违反非空值 约束
还有这个
@OneToMany(() => Project, project => project.successorId, { nullable: true })
public successorId?: string;
但是我收到了这个错误
TypeError:relatedEntities.forEach 不是函数
【问题讨论】:
标签: sql postgresql orm nestjs typeorm