[Nest.js 학습일기] Entity Embedding, Table Inheritance
[Nest.js 학습일기] Entity Embedding, Table Inheritance
Entitiy Embedding
Entity를 작성할 때 다음의 과정으로 코드를 재활용할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
export class Name{
@Column()
first: string;
@Column()
last: string;
}
@Entity()
export class StudentModel{
@PrimaryGeneratedColumn()
id: number;
// 위에서 정의한 Name 클래스 재활용
@Column(() => Name)
name: Name;
@Column()
class: string;
}
Inheritance
위와 기능적으로는 큰 차이가 없음. 다음과 같이 사용하면 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
export class BaseModel{
@PrimaryGeneratedColumn()
id: number;
@CreateDateColumn()
createdAt: Date;
@UpdateDateColumn()
updatedAt: Date;
}
@Entity()
export class BookModel extends BaseModel{
@Column()
name: string
}
SingleBaseModel
사실 위의 방법들로도 충분하나 하나의 table로 사용하고 싶다면
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
@Entity()
@TableInheritance({
column: {
name: 'type',
type: 'varchar',
}
})
export class SingleBaseModel{
@PrimaryGeneratedColumn()
id: number;
@CreateDateColumn()
createdAt: Date;
@UpdateDateColumn()
updatedAt: Date;
}
@ChildEntity('computer')
export class ComputerModel extends SingleBaseModel{
@Column()
brand: string;
}
@ChildEntity('airplane')
export class AirPlaneModel extends SingleBaseModel{
@Column()
brand: string;
}
이와 같이 코드를 작성하면 SingleBaseModel이 DB에 생성되고 해당 테이블에 brand라는 칼럼이 추가되며, 어떤 child가 왔는지에 따라 typpe이 ‘computer’, ‘airplane’으로 표시된다.
This post is licensed under CC BY 4.0 by the author.