연관관계 매핑

Woo Yong·2023년 5월 13일
1

Spring

목록 보기
1/15

연관관계 매핑

  • 객체의 참조와 테이블의 외래 키를 매핑하는 것

게시판 예제

Answer(답변)

Question(질문)

@ManyToOne란 ?

  • N:1, 한 개의 Question(질문)은 여러개 Answer(답변)을 가질 수 있으므로 Answer 기준으로 @ManyToOne을 선언합니다.

@OneToMany란 ?

  • 1:N, 여러개 Answer(답변)은 한 개의 Question(질문)에 등록될 수 있으므로 Question 기준으로 @OneToMnay를 선언합니다.

mappedby란 ?

  • JPA로 연관 관계를 설정할 때 가장 헷갈렸던 부분이었다. mappedby는 선언된 필드의 소유자가 누구인지 알려주기 위한 파라미터이다.

  • 따라서, Question의 answerList필드는 반대의 Answer의 question필드라는 것이다.

  • 즉, 연관관계 주인은 mappedBy속성으로 정해주고, 주인은 mappedBy속성을 사용하지 않는다.

@JoinColumn

  • @JoinColumn은 외래 키 매핑 시 사용한다.

  • 속성
    • name: 필드에 저장되는 외래 키 컬럼명
      • default : [필드명]_[참조하는 테이블(question)의 기본키 컬럼명(id)]
    • referencedColumnName : 외래 키가 참조하는 대상 테이블의 컬럼명
      • default : 참조하는 테이블(question)의 기본키 컬럼명(id)
    • unique : @Column 속성과 동일
    • nullable
    • columnDefinition

연관관계 주인

  • 객체에서의 연관관계는 "서로 다른 단방향 연관관계 2개"와 같다.
  • 엔티티를 양방향 연관관계로 설정하면 객체의 참조는 둘인데 외래 키는 하나가 되므로, 차이가 발생한다.
  • 이를 해결하기 위해 JPA에서는 두 객체 연관관계 중 하나를 정해서, 테이블의 외래키를 연관관계의 주인으로 관리한다.
profile
Back-End Developer

0개의 댓글