- 嵌入式实体
嵌入式实体
通过使用embedded columns,可以减少应用程序中的重复(使用组合而不是继承)。
嵌入列是一个列,它接受具有自己列的类,并将这些列合并到当前实体的数据库表中。
例如:
假设我们有User,Employee和Student实体。
这些属性都有少量的共同点,first name 和 last name属性。
import {Entity, PrimaryGeneratedColumn, Column} from "typeorm";@Entity()export class User {@PrimaryGeneratedColumn()id: string;@Column()firstName: string;@Column()lastName: string;@Column()isActive: boolean;}
import {Entity, PrimaryGeneratedColumn, Column} from "typeorm";@Entity()export class Employee {@PrimaryGeneratedColumn()id: string;@Column()firstName: string;@Column()lastName: string;@Column()salary: string;}
import {Entity, PrimaryGeneratedColumn, Column} from "typeorm";@Entity()export class Student {@PrimaryGeneratedColumn()id: string;@Column()firstName: string;@Column()lastName: string;@Column()faculty: string;}
我们可以做的是通过创建一个包含firstName和lastName的新类:
import {Entity, Column} from "typeorm";export class Name {@Column()first: string;@Column()last: string;}
然后”connect”实体中的这些列:
import {Entity, PrimaryGeneratedColumn, Column} from "typeorm";import {Name} from "./Name";@Entity()export class User {@PrimaryGeneratedColumn()id: string;@Column(type => Name)name: Name;@Column()isActive: boolean;}
import {Entity, PrimaryGeneratedColumn, Column} from "typeorm";import {Name} from "./Name";@Entity()export class Employee {@PrimaryGeneratedColumn()id: string;@Column(type => Name)name: Name;@Column()salary: number;}
import {Entity, PrimaryGeneratedColumn, Column} from "typeorm";import {Name} from "./Name";@Entity()export class Student {@PrimaryGeneratedColumn()id: string;@Column(type => Name)name: Name;@Column()faculty: string;}
Name实体中定义的所有列将合并为user,employee和student:
+-------------+--------------+----------------------------+| user |+-------------+--------------+----------------------------+| id | int(11) | PRIMARY KEY AUTO_INCREMENT || nameFirst | varchar(255) | || nameLast | varchar(255) | || isActive | boolean | |+-------------+--------------+----------------------------++-------------+--------------+----------------------------+| employee |+-------------+--------------+----------------------------+| id | int(11) | PRIMARY KEY AUTO_INCREMENT || nameFirst | varchar(255) | || nameLast | varchar(255) | || salary | int(11) | |+-------------+--------------+----------------------------++-------------+--------------+----------------------------+| student |+-------------+--------------+----------------------------+| id | int(11) | PRIMARY KEY AUTO_INCREMENT || nameFirst | varchar(255) | || nameLast | varchar(255) | || faculty | varchar(255) | |+-------------+--------------+----------------------------+
这种方式可以减少实体类中的代码重复。你可以根据需要在嵌入式类中使用尽可能多的列(或关系)。甚至可以在嵌入式类中嵌套嵌套列。
