JSRUN 用代码说话

实体继承

编辑教程

实体继承

具体表继承

你可以使用实体继承模式减少代码中的重复。 最简单和最有效的是具体的表继承。

例如,你有PhotoQuestionPost三个实体:

@Entity()
export class Photo {

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    title: string;

    @Column()
    description: string;

    @Column()
    size: string;

}
@Entity()
export class Question {

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    title: string;

    @Column()
    description: string;

    @Column()
    answersCount: number;

}
@Entity()
export class Post {

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    title: string;

    @Column()
    description: string;

    @Column()
    viewCount: number;

}

正如你所看到的,所有这些实体都有共同的列:idtitledescription。 为了减少重复并产生更好的抽象,我们可以为它们创建一个名为Content的基类:

export abstract class Content {

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    title: string;

    @Column()
    description: string;

}
@Entity()
export class Photo extends Content {

    @Column()
    size: string;

}
@Entity()
export class Question extends Content {

    @Column()
    answersCount: number;

}
@Entity()
export class Post extends Content {

    @Column()
    viewCount: number;

}

来自父实体的所有列(关系,嵌入等)(父级也可以扩展其他实体)将在最终实体中继承和创建。

这个例子将创建3个表 - photo, questionpost.

单表继承

TypeORM还支持单表继承。 当您有多个具有自己属性的类时,单表继承是一种模式,但是在数据库中,它们存储在同一个表中。

@Entity()
@TableInheritance({ column: { type: "varchar", name: "type" } })
export class Content {

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    title: string;

    @Column()
    description: string;

}
@ChildEntity()
export class Photo extends Content {

    @Column()
    size: string;

}
@ChildEntity()
export class Question extends Content {

    @Column()
    answersCount: number;

}
@ChildEntity()
export class Post extends Content {

    @Column()
    viewCount: number;

}

这将创建一个名为content的表,所有photos,questions和posts的实例都将保存到此表中。

使用嵌入式

通过使用embedded columns,可以减少应用程序中的重复(使用组合而不是继承)。 阅读有关嵌入实体的更多信息

JSRUN闪电教程系统是国内最先开创的教程维护系统, 所有工程师都可以参与共同维护的闪电教程,让知识的积累变得统一完整、自成体系。 大家可以一起参与进共编,让零散的知识点帮助更多的人。
X
支付宝
9.99
无法付款,请点击这里
金额: 0
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间
如有疑问请联系QQ:565830900
正在生成二维码, 此过程可能需要15秒钟