데이터베이스/TypeORM
[TypeORM] Entity간 관계 지정시 Column명 커스텀하기
초보군붕이
2023. 3. 4. 18:21
반응형
기본적으로 TypeORM에서 Entity간 관계를 지정하게되면 테이블명+컬럼ID로 생성된다.
board.entity.ts
@Entity('Board')
export class BoardEntity {
@PrimaryGeneratedColumn('uuid', { name: 'board_id' })
boardId: string;
@Column({ type: 'varchar', length: 50, nullable: false })
title: string;
// ...
@ManyToOne(() => UserEntity, (user) => user.userId)
user: UserEntity;
}
user.entity.ts
@Entity('User')
export class UserEntity {
@PrimaryGeneratedColumn('uuid', { name: 'user_id' })
userId: string;
@Column('varchar', { length: 320, nullable: false, unique: true })
email: string;
@Column('varchar', { length: 255, nullable: false })
password: string;
@OneToMany(() => BoardEntity, (board) => board.boardId)
board: BoardEntity;
}
하지만 데이터베이스 컬럼을 생성할때 네이밍 컨벤션은 camelCase보다는 snake_case를 선호하는 편이다.
이 때 typeorm 패키지 내부에 @JoinColumn() 데코레이터를 사용하면 내가 원하는대로 변경이 가능하다.
JoinColumn 데코레이터는 1:1, 1:N 관계에서 Column명을 커스텀하기 위해 사용한다.
name?: string 으로 되어있고 주석으로 Name of the Column 즉 컬럼의 이름을 뜻한다.
board.entity.ts 코드 변경
@Entity('Board')
export class BoardEntity {
@PrimaryGeneratedColumn('uuid', { name: 'board_id' })
boardId: string;
@Column({ type: 'varchar', length: 50, nullable: false })
title: string;
@ManyToOne(() => UserEntity, (user) => user.userId)
@JoinColumn({ name: 'user_id' }) // 원하는 컬럼값을 name으로 추가
user: UserEntity;
}
반응형