TypeOrm / / 2024. 11. 11. 03:44

TypeOrm 관계 설정 옵션

    @OneToOne(() => ProfileModel, (profile) => profile.user, {
        eager: false,
        cascade: true,
        nullable: true,
        onDelete: 'RESTRICT'
    })
  1. eager: false
    • 설명: eager 옵션은 find() 메서드로 엔티티를 가져올 때 관계된 엔티티를 함께 가져올지 여부를 결정합니다.
    • 값 설명: true로 설정하면 관계된 엔티티를 항상 함께 가져옵니다. false로 설정하면 기본적으로 관계된 엔티티를 가져오지 않으며, 필요할 때 명시적으로 가져와야 합니다.
    • 예시: eager: false로 설정되어 있으면 find()로 조회할 때 ProfileModel 엔티티가 자동으로 조회되지 않습니다. 필요할 경우 leftJoinAndSelect와 같은 메서드로 추가로 가져올 수 있습니다.
  2. cascade: true
    • 설명: cascade 옵션은 관계된 엔티티를 부모 엔티티와 함께 저장할지를 결정합니다.
    • 값 설명: true로 설정하면 부모 엔티티가 저장될 때 자식 엔티티도 함께 저장됩니다. false로 설정하면 부모 엔티티가 저장될 때 자식 엔티티는 자동으로 저장되지 않습니다.
    • 예시: cascade: true로 설정하면 User 엔티티를 저장할 때 관련된 ProfileModel 엔티티도 같이 저장됩니다.
  3. nullable: true
    • 설명: nullable 옵션은 관계 컬럼에 NULL 값을 허용할지를 설정합니다.
    • 값 설명: true로 설정하면 관계된 엔티티가 없을 때 NULL 값을 허용합니다. false로 설정하면 관계된 엔티티가 필수이며, NULL 값을 허용하지 않습니다.
    • 예시: nullable: true로 설정되어 있으면 User 엔티티가 생성될 때 ProfileModel 엔티티가 없어도 무방합니다.
  4. onDelete: 'RESTRICT'
    • 설명: onDelete 옵션은 관계된 엔티티가 삭제될 때 현재 엔티티가 어떻게 처리될지를 설정합니다.
    • 값 설명:
      • NO ACTION: 관계된 엔티티가 삭제될 때 아무 작업도 수행하지 않습니다. 필요 시 삭제 오류가 발생할 수 있습니다.
      • CASCADE: 관계된 엔티티가 삭제될 때 현재 엔티티도 자동으로 삭제됩니다.
      • SET NULL: 관계된 엔티티가 삭제될 때 관계 ID를 NULL로 설정합니다. nullable이 true일 때 유효합니다.
      • SET DEFAULT: 관계 ID를 테이블의 기본값으로 설정합니다.
      • RESTRICT: 관계된 엔티티를 참조하고 있는 경우, 삭제를 제한합니다.
    • 예시: onDelete: 'RESTRICT'로 설정되어 있으면, ProfileModel을 삭제하려 할 때 User 엔티티가 참조하고 있다면 삭제되지 않습니다.

추가 옵션

  1. lazy

    설명: 관계된 엔티티를 호출할 때까지 로드하지 않고 대기하는 옵션으로, 필요한 순간에만 관계 엔티티를 불러옵니다. eager와 반대되는 개념입니다.

    값:

    • true: 관계된 엔티티에 접근할 때까지 로드되지 않으며, 접근 시 로드됩니다.
    • false: 기본적으로 lazy 로딩을 사용하지 않습니다.예시: lazy: true로 설정하면, find()로 엔티티를 조회할 때 관계 엔티티를 즉시 가져오지 않고, 실제로 해당 엔티티에 접근하는 순간에 쿼리가 발생하여 가져옵니다.
  2. joinColumn

    설명: 관계의 주 테이블과 종속 테이블 간 연결 컬럼을 명시적으로 지정할 수 있으며, 주로 @OneToOne과 @ManyToOne에서 사용됩니다.

    옵션 값:

    • name: 관계 엔티티에 매핑되는 컬럼 이름을 설정합니다.
    • referencedColumnName: 참조되는 엔티티에서 어떤 컬럼을 참조할지를 설정합니다.예시: joinColumn: { name: 'profile_id', referencedColumnName: 'id' }와 같이 설정하면, profile_id 컬럼이 Profile 엔티티의 id를 참조하는 관계로 설정됩니다.
  3. inverseJoinColumn

    설명: @ManyToMany 관계에서 사용되며, 관계 테이블에서 반대편 엔티티와 연결될 컬럼을 지정합니다.

    옵션 값:

    • name: 반대 엔티티에 매핑되는 컬럼 이름을 설정합니다.
    • referencedColumnName: 반대 엔티티의 참조 컬럼을 지정합니다.예시: inverseJoinColumn: { name: 'user_id', referencedColumnName: 'id' }처럼 설정해 user_id 컬럼이 User 엔티티의 id를 참조하도록 할 수 있습니다.
  4. primary

    설명: 관계 엔티티의 ID로 사용되는 컬럼에 대해 기본 키를 설정할 수 있는 옵션입니다.

    값:

    • true: 관계 컬럼을 기본 키로 설정합니다.
    • false: 관계 컬럼을 기본 키로 설정하지 않습니다.예시: primary: true로 설정하면, 관계 엔티티의 컬럼이 기본 키 역할을 하게 됩니다.
  5. orphanedRowAction

    설명: 부모 엔티티가 자식 엔티티와의 관계에서 연결이 끊어진 후 고아가 된 엔티티(연관되지 않은 엔티티)를 어떻게 처리할지 결정합니다.

    값:

    • nullify: 부모 엔티티에서 관계가 해제되면 고아 엔티티가 NULL로 설정됩니다.
    • delete: 부모 엔티티에서 관계가 해제되면 고아 엔티티를 삭제합니다.예시: orphanedRowAction: 'delete'로 설정하면, 부모 엔티티가 삭제될 때 관계에서 고아가 된 자식 엔티티도 자동으로 삭제됩니다.
  6. onUpdate

    설명: 참조하는 엔티티의 ID가 업데이트될 때 현재 엔티티에서 어떻게 처리할지를 설정합니다.

    값:

    • NO ACTION: ID 업데이트 시 아무 작업도 하지 않습니다.
    • CASCADE: ID가 변경되면 해당 변경 사항이 현재 엔티티에도 전파됩니다.
    • SET NULL: ID가 변경되면 현재 엔티티의 해당 ID를 NULL로 설정합니다.
    • SET DEFAULT: ID가 변경되면 기본값으로 설정됩니다.
    • RESTRICT: 참조하는 엔티티의 ID가 변경될 수 없도록 제한합니다.예시: onUpdate: 'CASCADE'로 설정하면, 참조된 엔티티의 ID가 업데이트될 때 현재 엔티티의 관계도 업데이트됩니다.

'TypeOrm' 카테고리의 다른 글

TypeOrm 주요메서드  (0) 2024.11.12
TypeOrm FindManyOptions  (0) 2024.11.11
TypeOrm FindManyOptions  (0) 2024.11.11
TypeOrm Relationship  (0) 2024.11.09
TypeOrm Inheritance  (1) 2024.11.08
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유