отключить автогенерацию идентификаторов при передаче неопределенного для TypeORM MongoDB ObjectIdColumns - PullRequest
2 голосов
/ 21 февраля 2020

Я использую Nest Js с TypeORM и MongoDB. У меня есть объект Project, который может иметь проект-преемник. Мой текущий дизайн сущности

@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();
    }
}

. Проблема в том, что когда я присваиваю undefined successorId, MongoDB присваивает то же значение для id successorId. Таким образом, ответ json будет

{
  "id": "5e4f98671ad7ed2914fa596e",
  "successorId": "5e4f98671ad7ed2914fa596e"
}

Как я могу исправить это поведение? Я не уверен, что мне нужно отношение OneToOne, но я хочу предоставить проверку, чтобы можно было назначать только существующие идентификаторы в качестве преемников, я мог бы ожидать ошибок, когда передам случайные идентификаторы, которые не существуют.

...