Zum Hauptinhalt springen

Eingebettete Entitäten

Inoffizielle Beta-Übersetzung

Diese Seite wurde von PageTurner AI übersetzt (Beta). Nicht offiziell vom Projekt unterstützt. Fehler gefunden? Problem melden →

Es gibt eine hervorragende Möglichkeit, Redundanzen in Ihrer App zu reduzieren (durch Komposition statt Vererbung) mittels embedded columns. Eine eingebettete Spalte akzeptiert eine Klasse mit eigenen Spalten und fügt diese Spalten in die Datenbanktabelle der aktuellen Entität ein. Beispiel:

Angenommen, wir haben User-, Employee- und Student-Entitäten. Alle diese Entitäten haben Gemeinsamkeiten – Eigenschaften für first name und 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
}

Wir können die Redundanz von firstName und lastName reduzieren, indem wir eine neue Klasse mit diesen Spalten erstellen:

import { Column } from "typeorm"

export class Name {
@Column()
first: string

@Column()
last: string
}

Diese Spalten können Sie dann in Ihren Entitäten "verbinden":

import { Entity, PrimaryGeneratedColumn, Column } from "typeorm"
import { Name } from "./Name"

@Entity()
export class User {
@PrimaryGeneratedColumn()
id: string

@Column(() => Name)
name: Name

@Column()
isActive: boolean
}
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm"
import { Name } from "./Name"

@Entity()
export class Employee {
@PrimaryGeneratedColumn()
id: string

@Column(() => Name)
name: Name

@Column()
salary: number
}
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm"
import { Name } from "./Name"

@Entity()
export class Student {
@PrimaryGeneratedColumn()
id: string

@Column(() => Name)
name: Name

@Column()
faculty: string
}

Alle in der Name-Entität definierten Spalten werden in user, employee und student eingefügt:

+-------------+--------------+----------------------------+
| user |
+-------------+--------------+----------------------------+
| id | int | PRIMARY KEY AUTO_INCREMENT |
| nameFirst | varchar(255) | |
| nameLast | varchar(255) | |
| isActive | boolean | |
+-------------+--------------+----------------------------+

+-------------+--------------+----------------------------+
| employee |
+-------------+--------------+----------------------------+
| id | int | PRIMARY KEY AUTO_INCREMENT |
| nameFirst | varchar(255) | |
| nameLast | varchar(255) | |
| salary | int | |
+-------------+--------------+----------------------------+

+-------------+--------------+----------------------------+
| student |
+-------------+--------------+----------------------------+
| id | int | PRIMARY KEY AUTO_INCREMENT |
| nameFirst | varchar(255) | |
| nameLast | varchar(255) | |
| faculty | varchar(255) | |
+-------------+--------------+----------------------------+

Dadurch wird die Code-Redundanz in den Entitätsklassen reduziert. Sie können beliebig viele Spalten (oder Beziehungen) in eingebetteten Klassen verwenden. Sogar verschachtelte eingebettete Spalten innerhalb eingebetteter Klassen sind möglich.