TypeORM 테이블 간 릴레이션

Sinf·2022년 4월 28일
0

고민의 흔적

목록 보기
18/38
post-thumbnail

테이블 간 릴레이션

AEntity

  @OneToMany(() => BEntity, (b) => b.a)
  arrayB: BEntity[];

AEntity에 arrayB라는 BEntity 배열을 선언한다.

a - b 은 1:N 관계,
그리고 OneToMany 데코레이터를 이용해 릴레이션을 맺는다.

(b) => b.a는 a가 BEntity에서 참조하는 컬럼을 지정한 것.

BEntity

  @ManyToOne(() => AEntity)
  @JoinColumn({ name: 'a', referencedColumnName: 'name' })
  a: AEntity;

반대로 b - a 는 N:1으로 ManyToOne으로 지정한다.

@JoinColumn 데코레이터의 경우 BEntity를 가져와 참조할 때, a table을 JOIN해서 가져오기 때문에 선언해줬다.

name을 통해 가져올 때 a 라는 컬럼 이름으로 가져오는 것,
referencedColumnName을 통해 a에서 name 컬럼을 가져오는 것을 설정한다.

사용하기

기존에 릴레이션이 없는 상황에서 Query를 작성할 때,
테이블 b에 테이블 a를 LEFT JOIN 한 결과에서 처리하는 로직을 수행했다. 이제 테이블 b에서 SELECT만 사용해도, JOIN한 테이블에서 결과를 가져온다.

profile
주니어 개발자입니다. 🚀

0개의 댓글