본문 바로가기
프로그래밍/TypeORM

[TypeORM] Embedded Entities

by YuminK 2023. 8. 31.

임베디드 컬럼을 사용하여 중복을 줄일 수 있다. 자신의 컬럼을 가진 클래스를 받아들이는 컬럼이다. 그리고 이러한 컬럼을 현재 엔티티 테이블에 합친다. 

 

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 { Column } from "typeorm"

export class Name {
    @Column()
    first: string

    @Column()
    last: string
}

 

이후에 이러한 컬럼을 엔티티에 연결한다. 

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
}

 

Name Entity로 정의된 칼럼은 user, employee, student에 합쳐진다. 

다양한 칼럼을 선언하여 처리할 수 있으며, 임베디드 클래스에 임베디드 클래스를 충첩해서 사용할 수 있다.

댓글