Nest. TypeORM 데커레이터

cm·2024년 1월 18일

Nest

목록 보기
7/7
post-thumbnail

Nest. TypeORM 데커레이터

데커레이터(@)

  • 각 요소의 선언부 앞에 데커레이터를 선언하면 데커레이터로 구현된 코드를 함께 실행한다.
  • 합성 : 위에서 아래로 평가되고, 아래에서 위로 호출된다.

1. 분류

1-1. @Entity

  • 엔터티(테이블)를 정의할 때 사용되는 데코레이터.

1-2. @Column

  • 엔터티의 속성(컬럼)을 정의할 때 사용.

1-3. @PrimaryGeneratedColumn

  • 자동으로 증가하는 기본 키(Primary Key) 컬럼을 정의할 때 사용.

1-4. 관계 데코레이터

@OneToOne

  • 일대일 관계를 정의할 때 사용.

  • 옵션:
    target: 연결할 엔터티의 타입.
    cascade: 연결된 엔터티에 대한 변경 사항이 현재 엔터티에 적용되도록 설정.
    onDelete: 삭제 시 어떻게 처리할지 설정.

    // user.entity.ts
      @OneToOne(() => Profile, { cascade: true, onDelete: 'SET NULL' })
      @JoinColumn({ name: 'profileId' })
      profile: Profile

@ManyToOne / @OneToMany

  • 다대일 관계/일대다 관계를 정의할 때 사용.
  • 옵션:
    target: 연결할 엔터티의 타입.
    cascade: 연결된 엔터티에 대한 변경 사항이 현재 엔터티에 적용되도록 설정.
    onDelete: 삭제 시 어떻게 처리할지 설정.

@ManyToMany

  • 다대다 관계를 정의
  • 옵션:
    target: 연결할 엔터티의 타입.
    cascade: 연결된 엔터티에 대한 변경 사항이 현재 엔터티에 적용되도록 설정.
    onDelete: 삭제 시 어떻게 처리할지 설정.
  • @JoinTable: ManyToMany 관계에서 두 엔터티 간의 관계를 나타내기 위해서는 연결 테이블이 필요한데,이 연결 테이블에 대한 설정가능하다. 이 연결 테이블은 관계를 유지하기 위해 사용된다.
  // user.entity 
  @OneToMany(() => Product, (product) => product.userId)
  products: Product[];

  // product.entity
  @ManyToOne(() => User, (user) => user.products)
  @JoinColumn({ name: 'user_id' })
  userId: number;

  // product.dto
  userId: number;

ℹ️ joinColumn에 name을 안주면 변수명에 자동으로 Id가 붙는다! [ex]userId

@JoinColumn

  • 테이블 간의 연관 관계를 매핑할 때 외래 키에 대한 세부적인 설정을 제어하는 데 사용
  • 옵션:
    name: 데이터베이스에 저장되는 외래키 이름을 명시적으로 지정
    type : 외래 키의 데이터 타입 지정
    nullable : nullable 설정
    relations:{컬럼: true}: 지정한 외래키까지 포함하여 조회
//entity
  @OneToOne(() => Profile, { cascade: true, onDelete: 'SET NULL' })
  @JoinColumn({ name: 'profileId' })
  profile: Profile;

//service
  findOne(id: number) {
    return this.userRepository.findOne({
      where: { id },
      relations: { profile: true },
    });

1:1 (One-to-One) 관계

  • 한 엔터티가 다른 엔터티와 1:1로 매핑되어 있다.
  • 일반적으로 양쪽 엔터티 중 하나가 다른 엔터티의 기본 키를 참조한다. (기본 키는 필수적으로 삽입된다.)

1:N (One-to-Many) 관계

  • 한 엔터티가 다른 엔터티와 1:N으로 매핑되어 있다.
  • 1:n 관계에서 "1" 쪽의 엔터티는 "n" 쪽의 엔터티를 여러 개 가질 수 있다. 일반적으로 "n" 쪽의 엔터티에는 "1" 쪽의 기본 키를 참조하는 외래 키가 들어간다.

N:M (Many-to-Many) 관계

  • 두 엔터티 간에 매우 많은 관계가 존재하는 경우 사용된다.
  • 별도의 연결 테이블을 사용하여 두 엔터티 간의 매핑을 처리한다. 연결 테이블에는 두 엔터티의 기본 키를 참조하는 외래 키가 필수적으로 들어가게 된다.
profile
나를 위한 기록

0개의 댓글