[JPA-기본편] 연관관계 매핑 기초

둡둡·2023년 1월 31일
0

JPA-Basic

목록 보기
6/11

연관관계 필요성

테이블에 맞춘 모델링

  • 참조 대신 외래 키 사용 > 외래 키 식별자를 직접 다룸 > 식별자로 다시 조회
    • 객체 지향적인 방법이 아님
  • 테이블은 외래 키로 조인된 테이블을 찾음
  • 객체는 참조를 사용하여 연관된 객체를 찾음

단방향 연관관계

  • 객체의 참조와 테이블의 외래 키를 매핑
    • @ManyToOne / @OneToMany
    • @JoinColumn
  • 단방향 연관관계 설정
    • 참조 저장 > 참조로 연관관계 조회(객체 그래프 탐색) > 연관관계 수정

양방향 연관관계

양방향 매핑

  • Member 엔티티(n)에는 단방향과 동일하게 참조(Team) 저장
    • @ManyToOne (n -> 1)
  • Team 엔티티(1)에는 컬렉션 추가
    • @OneToMany (1 -> n)

객체와 테이블 관계 차이

  • 객체 연관관계 : 2개
    • 회원 -> 팀 (단방향)
    • 팀 -> 회원 (단방향)
  • 테이블 연관관계 : 1개
    • 회원 <-> 팀 (양방향)
  • 객체를 양방향으로 참조하려면 단방향 연관관계 2개 필요

연관관계의 주인(Owner)

  • 객체의 두 관계 중 하나를 연관관계의 주인으로 지정
    • 외래 키의 위치를 기준으로, 외래 키가 있는 곳을 주인으로 지정
      • (ex) Member.team
  • 연관관계의 주인만 외래 키 관리(등록 및 수정)
    • 반대쪽은 mappedBy 속성으로 주인 지정, 읽기만 가능
  • 양방향 매핑 시 연관관계 주인에도 값 입력해야 함(항상 양쪽에 입력)
    • 편의 메소드 생성(생성자 또는 메소드 분리 설정 등)
    • 무한 루프 조심(toString(), lombok, JSON 생성 라이브러리 등)

정리

  • 단방향 매핑만으로도 연관관계 매핑 완료
  • 단방향 매핑만 설정하고, 필요 시 양방향 추가

자바 ORM 표준 JPA 프로그래밍 기본편 - 김영한, 인프런

profile
괴발개발라이프

0개의 댓글