군붕이의 메모장

[TypeORM] Entity간 관계 지정시 Column명 커스텀하기 본문

데이터베이스/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;
}

 

 

userUserId로 지정된 모습

 

하지만 데이터베이스 컬럼을 생성할때 네이밍 컨벤션은 camelCase보다는 snake_case를 선호하는 편이다.

 

이 때 typeorm 패키지 내부에 @JoinColumn() 데코레이터를 사용하면 내가 원하는대로 변경이 가능하다.

 

JoinColumn 데코레이터의 구현부

JoinColumn 데코레이터는 1:1, 1:N 관계에서 Column명을 커스텀하기 위해 사용한다.

 

JoinColumnOptions의 타입

 

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;
}

 

column이 잘 들어간 모습

 

 

반응형

'데이터베이스 > TypeORM' 카테고리의 다른 글

[TypeORM] 테이블 생성시 기본값 저장 구현  (0) 2023.03.05