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