Vai al contenuto principale

Entità Incorporate

Traduzione Beta Non Ufficiale

Questa pagina è stata tradotta da PageTurner AI (beta). Non ufficialmente approvata dal progetto. Hai trovato un errore? Segnala problema →

Esiste un modo fantastico per ridurre la duplicazione nella tua applicazione (usando la composizione al posto dell'ereditarietà) attraverso le embedded columns. Una colonna incorporata è una colonna che accetta una classe con le proprie colonne e unisce queste colonne nella tabella del database dell'entità corrente. Esempio:

Supponiamo di avere le entità User, Employee e Student. Tutte queste entità condividono alcune proprietà comuni: first name e 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
}

Possiamo ridurre la duplicazione di firstName e lastName creando una nuova classe con queste colonne:

import { Column } from "typeorm"

export class Name {
@Column()
first: string

@Column()
last: string
}

Poi puoi "collegare" queste colonne nelle tue entità:

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
}

Tutte le colonne definite nell'entità Name verranno unite in user, employee e student:

+-------------+--------------+----------------------------+
| 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) | |
+-------------+--------------+----------------------------+

In questo modo si riduce la duplicazione del codice nelle classi delle entità. Puoi utilizzare tutte le colonne (o relazioni) necessarie nelle classi incorporate. Puoi persino avere colonne incorporate annidate all'interno di altre classi incorporate.