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 |