Typescript 在NestJS中与单表继承的多个子项的关系

Typescript 在NestJS中与单表继承的多个子项的关系,typescript,nestjs,typeorm,Typescript,Nestjs,Typeorm,TL.DR.: 我希望与继承同一表的多个实体建立单一关系。为此,我需要指定关系中涉及的实体,并且我希望指定多个实体。在我看来,即使指定的类型继承同一个表,也不可能与多个类型建立关系。可以吗?如果可以,我做错了什么 完整描述: 我将任务实体作为基本实体。出于这个问题的目的,我将删除大部分不必要的列,以便更容易理解 import { Column, Entity, TableInheritance } from 'typeorm'; @Entity('tasks') @TableInheritan

TL.DR.:

我希望与继承同一表的多个实体建立单一关系。为此,我需要指定关系中涉及的实体,并且我希望指定多个实体。在我看来,即使指定的类型继承同一个表,也不可能与多个类型建立关系。可以吗?如果可以,我做错了什么

完整描述:

我将任务实体作为基本实体。出于这个问题的目的,我将删除大部分不必要的列,以便更容易理解

import { Column, Entity, TableInheritance } from 'typeorm';

@Entity('tasks')
@TableInheritance({ column: { type: 'varchar', name: 'type' } })
export class Task {
  @PrimaryGeneratedColumn({ type: 'bigint' })
  id: string;

  @Column({ length: 255 })
  name: string;
}
我有TaskCollection和SpecialTask实体,它们继承了任务实体。我希望在它们之间建立父子关系,以便只有TaskCollection类型的实体可以有子实体,即TaskCollection可以有TaskCollection和SpecialTask类型的子实体

TaskCollection实体代码:

import { Type } from 'class-transformer';
import { ChildEntity, ManyToOne, OneToMany } from 'typeorm';

@ChildEntity('task_collections')
export class TaskCollection extends Task {
 @ManyToOne(
    () => TaskCollection,
    tc => tc.childTasks,
    {
      onDelete: 'CASCADE',
    },
  )
  @Type(() => TaskCollection)
  parentTask: TaskCollection;

  @OneToMany(
    () => TaskCollection | SpecificTask,
    t => t.parentTask,
  )
  @Type(() => TaskCollection | SpecificTask)
  childTasks: (TaskCollection | SpecificTask)[];
}
import { Type } from 'class-transformer';
import { ChildEntity, Column, ManyToOne, OneToMany } from 'typeorm';

@ChildEntity('specific_tasks')
export class SpecificTask extends Task {
 @ManyToOne(
    () => TaskCollection,
    tc => tc.childTasks,
    {
      onDelete: 'CASCADE',
    },
  )
  @Type(() => TaskCollection)
  parentTask: TaskCollection;
}
特定任务实体代码:

import { Type } from 'class-transformer';
import { ChildEntity, ManyToOne, OneToMany } from 'typeorm';

@ChildEntity('task_collections')
export class TaskCollection extends Task {
 @ManyToOne(
    () => TaskCollection,
    tc => tc.childTasks,
    {
      onDelete: 'CASCADE',
    },
  )
  @Type(() => TaskCollection)
  parentTask: TaskCollection;

  @OneToMany(
    () => TaskCollection | SpecificTask,
    t => t.parentTask,
  )
  @Type(() => TaskCollection | SpecificTask)
  childTasks: (TaskCollection | SpecificTask)[];
}
import { Type } from 'class-transformer';
import { ChildEntity, Column, ManyToOne, OneToMany } from 'typeorm';

@ChildEntity('specific_tasks')
export class SpecificTask extends Task {
 @ManyToOne(
    () => TaskCollection,
    tc => tc.childTasks,
    {
      onDelete: 'CASCADE',
    },
  )
  @Type(() => TaskCollection)
  parentTask: TaskCollection;
}

我希望避免更改任务实体,因为我有更多与此关系无关的实体,但我不知道是否有可能这样做

有没有关于如何做到这一点的建议