为TypeORM MongoDB ObjectdColumns传入未定义时禁用自动生成ID

为TypeORM MongoDB ObjectdColumns传入未定义时禁用自动生成ID,mongodb,nestjs,typeorm,Mongodb,Nestjs,Typeorm,我将NestJs与TypeORM和MongoDB一起使用。我有一个项目实体,它可能有一个后续项目。我目前的实体设计是 @Entity() export class Project extends BaseEntity { @ObjectIdColumn() public id: ObjectID; @ObjectIdColumn({ nullable: true, generated: false }) // set value manually @OneToOne(() =&

我将NestJs与TypeORM和MongoDB一起使用。我有一个
项目
实体,它可能有一个后续项目。我目前的实体设计是

@Entity()
export class Project extends BaseEntity {
  @ObjectIdColumn()
  public id: ObjectID;

  @ObjectIdColumn({ nullable: true, generated: false }) // set value manually
  @OneToOne(() => Project, project => project.id) // key has to exist if not null?
  public successorId?: ObjectID;
}
当我想保留数据类型时,
successorId
似乎必须是一个
ObjectIdColumn
。但是我想禁用自动生成,因为我想手动分配后续项目。因此,在我的存储库中,我通过

@EntityRepository(Project)
export class ProjectsRepository extends Repository<Project> {
    public createProject(successorId?: ObjectID): Promise<Project> {
        const project: Project = new Project();
        project.successorId = successorId;

        return project.save();
    }
}
我如何纠正这种行为?我不确定是否需要OneToOne关系,但我想提供一个验证,以便只能将现有ID分配为后续ID,当我传入不存在的随机ID时,我预计会出现错误。

问题就在这里

  @OneToOne(() => Project, project => project.id)
我想你误解了OneToOne的选择。您正在向它输入相关实体(第二个参数)的
PK
列,同时它用于定义可以引用关系另一端的属性。 尝试完全删除第二个选项,保留它

  @OneToOne(() => Project)

让我们知道

尝试删除
project=>project.id
  @OneToOne(() => Project)