[Nest.js 학습일기] typeORM - Column Annotation, Property
[Nest.js 학습일기] typeORM - Column Annotation, Property
@Column()
옵션
해당 데코레이터엔 다음과 같은 옵션들을 추가할 수 있다.
type
: varchar, int … (자동 추론)name
: 실제 데이터베이스의 컬럼 이름 (자동 추론)nullable
: null값 사용 가능 여부update
: 생성할 때만 값을 입력할 것이냐 (두번째 save의 경우 무시할 것이냐)- 현재 해당 기능은 typeScript의 오류인지 모르겠으나 error을 return 하지 않는다는 문제가 존재함
length
: 몇글자 까지 가능하냐. 일반 string의 경우 varchar을 사용해야 길이를 셀 수 있음. (not text!)select
: find()로 가져올 때 기본적으로 가져오게 할 것이냐default
: 아무것도 넣지 않았을 때, 기본적으로 들어갈 값unique
: 이 값이 유일무이한 값을 지녀야 하는지
특수 데코레이터
특수 목적을 지니는 데코레이터
@PrimaryGeneratedColumn()
: 자동으로 증가하는 기본키 (PK)@PrimaryColumn()
을 사용하면 기본키로 설정 가능하나 자동으로 증가하지 않기에 값을 입력해야함.'uuid'
를 옵션으로 넣으면 기본키보다 복잡한 형태의 기본키 제공1 2 3 4 5 6 7 8
{ "id": 1, "role": "user", "createdAt": "2024-12-02T21:22:42.832Z", "updatedAt": "2024-12-02T21:22:42.832Z", "version": 1, "additionalId": "d6b53d07-03a0-4f44-a24d-2cac7882cce7" }
@CreateDateColumn()
,@UpdateDateColumn()
: 생성 / 업데이트 시 날짜@VersionColumn()
: save된 횟수 (update된 횟수)
Enum의 활용
enum을 활용해서 역할군을 지정하거나 이런식으로 활용 가능
1
2
3
4
5
6
7
8
9
10
11
export enum Role {
USER = 'user',
ADMIN = 'admin',
}
// ...codes
@Column({
type: 'enum',
enum: Role,
default: Role.USER,
})
role: Role;
학습에 활용한 코드들
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import {
Column,
CreateDateColumn,
Entity,
Generated,
PrimaryGeneratedColumn,
UpdateDateColumn,
VersionColumn
} from "typeorm";
export enum Role {
USER = 'user',
ADMIN = 'admin',
}
@Entity()
export class UserModel {
// @PrimaryColumn()은 개인이 PK값을 직접 넣어줘야함.
// @PrimaryGeneratedColumn('uuid') => 데이터가 생성될 때 마다 1씩 올라가는 것과 달리
// 굉장히 복잡한 uuid로 생성한다는 의미
@PrimaryGeneratedColumn()
id: number;
@Column({
// type과 name은 자동 유추 가능
type: 'varchar',
name: 'title',
// 300자 까지 가능
length: 300,
// nullable
nullable: true,
// 생성할 때만 값 지정 가능
// typeScript의 오류인가, 오류를 밷지 않는 문제 존재함 현재
update: true,
// find()로 가져올 때, 기본적으로 가져오게 할 것이냐.
select: false,
// 아무것도 입력하지 않았을 때, 어떤 값을 넣을 것이냐
default: 'default value',
// 이 값이 유일무이한 값이여야 하는지
// 닉네임 관련해서 사용할 수 있을 듯?
unique: false,
})
title: string;
@Column({
type: 'enum',
enum: Role,
default: Role.USER,
})
role: Role;
@CreateDateColumn()
createdAt: Date;
@UpdateDateColumn()
updatedAt: Date;
// 업데이트가 몇번 되었는지 .. 업데이트 될 때 마다 1씩 올라감
// 즉 save 될수록 숫자 하나씩 증가
@VersionColumn()
version: number;
@Column()
@Generated('uuid')
additionalId: string;
}
This post is licensed under CC BY 4.0 by the author.