일대일 관계를 정의할 때 사용.
옵션:
target: 연결할 엔터티의 타입.
cascade: 연결된 엔터티에 대한 변경 사항이 현재 엔터티에 적용되도록 설정.
onDelete: 삭제 시 어떻게 처리할지 설정.
// user.entity.ts
@OneToOne(() => Profile, { cascade: true, onDelete: 'SET NULL' })
@JoinColumn({ name: 'profileId' })
profile: Profile
target: 연결할 엔터티의 타입.cascade: 연결된 엔터티에 대한 변경 사항이 현재 엔터티에 적용되도록 설정.onDelete: 삭제 시 어떻게 처리할지 설정.target: 연결할 엔터티의 타입.cascade: 연결된 엔터티에 대한 변경 사항이 현재 엔터티에 적용되도록 설정.onDelete: 삭제 시 어떻게 처리할지 설정. // 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
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) 관계
- 두 엔터티 간에 매우 많은 관계가 존재하는 경우 사용된다.
- 별도의 연결 테이블을 사용하여 두 엔터티 간의 매핑을 처리한다. 연결 테이블에는 두 엔터티의 기본 키를 참조하는
외래 키가 필수적으로 들어가게 된다.