TypeOrm / / 2024. 11. 8. 03:56

TypeOrm Embedded Entity

import { Column, Entity, PrimaryGeneratedColumn } from "typeorm";

export class Name {
    @Column()
    first: string;

    @Column()
    last: string;
}

@Entity()
export class StudentModel {
    @PrimaryGeneratedColumn()
    id: number;

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

    @Column()
    class: string;
}

@Entity()
export class TeacherModel {
    @PrimaryGeneratedColumn()
    id: number;

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

    @Column()
    salary: number;
}

여기 사용된 문법은 임베디드 엔티티(Embedded Entity)를 사용하는 방식입니다. TypeORM에서는 한 엔티티의 일부 속성을 다른 클래스(엔티티)로 분리하고 해당 클래스를 다른 엔티티에 임베드(내포)하여 재사용할 수 있습니다.

임베디드 엔티티 설명

Name 클래스는 **StudentModel**과 TeacherModel 엔티티에서 임베디드 엔티티로 사용되고 있습니다.

export class Name {
    @Column()
    first: string;

    @Column()
    last: string;
}

이 Name 클래스는 독립적인 엔티티가 아니며, @Entity 데코레이터가 없기 때문에 테이블로 생성되지 않습니다. 대신, **StudentModel**과 TeacherModel 엔티티에 임베드되어 **first**와 last 필드가 각각의 테이블에 컬럼으로 추가됩니다.

임베디드 엔티티의 장점

임베디드 엔티티를 사용하면 중복되는 데이터 구조를 재사용할 수 있습니다. 예를 들어, **Name**과 같은 정보는 여러 엔티티에서 공통적으로 필요할 수 있으며, 이를 임베디드 엔티티로 정의하여 일관된 방식으로 재사용할 수 있습니다.

예시에서 생성되는 테이블 구조

**StudentModel**과 TeacherModel 엔티티는 각각 데이터베이스에 테이블로 생성되며, Name 클래스의 **first**와 last 필드도 포함됩니다.

예를 들어 **StudentModel**의 테이블 구조는 다음과 비슷하게 생성됩니다.

id name_first name_last class

id name_first name_last class
1 John Doe 3-A

그리고 **TeacherModel**의 테이블 구조는 다음과 같이 생성될 것입니다.

id name_first name_last salary

id name_first name_last salary
1 Jane Smith 50000

이처럼 임베디드 엔티티를 사용하면 코드의 재사용성과 가독성을 높이고 데이터베이스 테이블의 컬럼 구조를 유연하게 관리할 수 있습니다.

'TypeOrm' 카테고리의 다른 글

TypeOrm Relationship  (0) 2024.11.09
TypeOrm Inheritance  (1) 2024.11.08
TypeOrm 엔티티 옵션  (0) 2024.11.08
TypeOrm이 기본 개념  (1) 2024.11.08
Typeorm 사용해보기  (1) 2024.11.08
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유