특정 테이블끼리 하나의 관계를 연결짓는 것을 일대일 관계라고 말한다.
예를 들어 UserModel 에선 ProfileModel을 가져야 하고, 마찬가지로 ProfileModel 에서도 UserModel을 가지고 있어야 한다면 일대일 관계가 성립된다.
import { Entity, PrimaryGeneratedColumn, Column, OneToOne, JoinColumn } from 'typeorm';
@Entity()
export class Profile {
  @PrimaryGeneratedColumn()
  id: number;
  @Column({ type: 'text' })
  bio: string;
  // 추가적인 프로필 관련 컬럼들을 정의할 수 있습니다.
}
@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;
  @Column({ type: 'varchar', length: 100 })
  name: string;
  // 1:1 관계를 정의합니다. 
  // @JoinColumn 데코레이터를 사용하여 해당 테이블(User)이 외래 키를 소유함을 명시합니다.
  @OneToOne(() => Profile, { cascade: true })
  @JoinColumn() // 외래 키가 User 테이블에 생성됨
  profile: Profile;
}@JoinColumn: 이 데코레이터를 사용하는 엔티티가 외래 키(foreign key)를 소유하게 된다.
관계 옵션 (모든 관계에서 설정 가능)
@OneToOne(() => ProfileModel, (profile) => profile.user, {
        // find() 실행 할때마다 항상 같이 가져올 relation
        eager: true,
        // true일 경우 저장할때 relation을 한번에 같이 저장 가능
        cascade: true,
        // null이 되어도 되는지 (기본값 true)
        nullable: true,
        // 관계가 삭제됐을 때
        // no action -> 아무것도 안함
        // cascade -> 참조하는 Row도 같이 삭제
        // set null -> 참조하는 Row에서 참조 id를 null로 변경
        // set default -> 기본 세팅으로 설정 (테이블의 기본 세팅)
        // restrict -> 참조하고 있는 Row가 있는 경우 참조당하는 Row 삭제 불가
        onDelete: 'CASCADE',
    })
    @JoinColumn()
    profile: ProfileModel;eager
find 계열 함수를 실행 시 관계를 같이 가져올지 설정 여부이다.
false 이면 가져오지 않으며, true이면 가져온다.
기본값은 false이다.

cascade
관계가 연결되어있는 것들을 한번에 저장할 수 있도록 할지 설정 여부이다.
true일 경우 저장할때 relation을 한번에 같이 저장 가능해진다.
  @Post('user/profile')
  async createUserAndProfile() {
    const user = await this.userRepository.save({
      email: 'user-0@google.com',
      // cascade가 true일 경우에만 가능
      profile: {
        profileImg: 'qwer.jpg',
      }
    });
    return user;
  }User와 Profile은 일대일 관계이므로 User 내의 Profile을 변경하거나 생성이 가능해진다.
기본값은 false 이다.
nullable
null이 되어도 되는지 (기본값 true)
onDelete
관계가 삭제됐을 때 어떤 행동을 할지 결정한다.
- no action -> 아무것도 안함
- cascade -> 참조하는 Row도 같이 삭제
- set null -> 참조하는 Row에서 참조 id를 null로 변경
- set default -> 기본 세팅으로 설정 (테이블의 기본 세팅)
- restrict -> 참조하고 있는 Row가 있는 경우 참조당하는 Row 삭제 불가
'NestJS' 카테고리의 다른 글
| TypeORM - 다대다 관계 구현 (0) | 2025.02.24 | 
|---|---|
| TypeORM - 일대다, 다대일 관계 구현 (0) | 2025.02.24 | 
| Entity Embedding VS Table Inheritance (0) | 2025.02.24 | 
| TypeORM - Entity Column 탐구 (0) | 2025.02.24 | 
| TypeORM - Repository 주입하기 (0) | 2025.02.24 | 
 
												
											