인프런 커뮤니티 질문&답변

ym Kim님의 프로필 이미지
ym Kim

작성한 질문수

따라하며 배우는 노드, 리액트 시리즈 - 레딧 사이트 만들기(NextJS)(Pages Router)

Comment Entity

TypeORM 관련 질문드립니다.

작성

·

441

0

Comment.ts 파일을 생성할 때,

Comment.ts  파일을 생성할 때,
@ManyToOne(() => User)
@JoinColumn({ name: 'username', referencedColumnName: 'username' })
user: User;

@ManyToOne(() => Post, (post) => post.comments, { nullable: false })
post: Post;

둘 다 똑같은 ManyToOne 인데 형식이 왜 다른지 알 수 있을까요?

Vote.ts 같은 경우에도

  @ManyToOne(() => User)
  @JoinColumn({ name: 'username', referencedColumnName: 'username' })
  user: User;

  @ManyToOne(() => Post)
  post: Post;

  @ManyToOne(() => Comment)
  comment: Comment;

이런식으로 같은 데코레이터여도 어떤 것은 () => xx 다음에 무언가를 붙이는 경우가 있고 JoinColumn을 붙이는 경우도 있고, () => xx 만 붙이는 경우가 있는데 어떤 경우에 따라 어떻게 달라지고, 무슨 차이가 있는지 궁금합니다.

답변 2

0

안녕하세요 강사님,


그렇다면 어떤 것은 생략하고 어떤 것은 생략하지 않는다는 것인데 그러면 Convention을 유지하는 것 같지 않습니다.

제가 직접 만들 때는 무조건 넣고 하려고 하는데 크게 문제는 없을까요?

0

John Ahn님의 프로필 이미지
John Ahn
지식공유자

안녕하세요
우선 @OneToMany()/@ManyToOne()에서는 @JoinColumn()을 생략할 수 있습니다.
또한 ManyToOne에 파라미터를 보면
1. Type 2. inverseSide 3.Option 입니다.
실제 타입스크립트로 보면

typeFunctionOrTarget: string | ((type?: any) => ObjectType<User>),
inverseSide?: string | ((object: User) => any),
options?: RelationOptions

 

이렇게 되어있습니다.
저기 inverseSide? <= 이 물음표가 있으면 선택사항을 뜻합니다.
그러기에 정의를 해줘도 되고 안 해줘도 되기에 생략을 한 부분입니다.
세 번째 options 파라미터도 그와 같습니다 ~

생략을 해준다고 해서 다른 현상이 일어나고 하지는 않습니다.
왜냐면 typeorm 이 내부에서 알아서 작업을 하기 때문입니다.
감사합니다.

ym Kim님의 프로필 이미지
ym Kim

작성한 질문수

질문하기