[6장] 다양한 연관관계 매핑

6-1. 다대일

다대일 관계의 반대는 항상 일대다 관계 / 일대다 관계의 반대는 항상 다대일 관계

 

다대일 단방향 [N:1]

  • JoinColumn 어노테이션으로 N쪽의 테이블의 필드를 외래키와 매핑해서 관리

다대일 양방향 [N:1, 1:N]

  • 외래키가 있는 쪽이 연관관계의 주인
    • 항상 N쪽에 외래키가 존재
    • JPA는 외래 키 관리시 연관관계의 주인만 사용
    • 주인이 아닌 쪽은 조회를 위한 JPQL/객체 그래프 탐색시 사용
  • 항상 서로를 참조
    • 연관관계 편의 메소드를 작성하는 것이 좋음

 

6-2. 일대다

일대다: 다대일 관계의 반대, 엔티티 하나 이상 참조 가능 → Collection, List, Set, Map 중 하나 사용 필요

 

일대다 단방향[1:N]

  • 반대쪽 테이블에 있는 외래 키를 관리
  • 외래키는 항상 N쪽의 테이블에 존재
  • @JoinColumn 명시 필수 → 미사용시 JPA에서 조인 테이블 전략 기본 사용 매핑
  • 매핑한 객체가 관리하는 외래 키가 다른 테이블에 존재로 INSERT시 UPDATE SQL문이 추가적으로 필요한 단점
  • 일대다 단방향보다는 다대일 양방향 매핑 사용 추천 → 외래 키 관리의 어려움

일대다 양방향[1:N, N:1]

  • 존재 X, 다대일 양방향 매핑을 사용
  • 다대일 양방향 매핑 = 일대다 양방향 매핑
  • 연관관계의 주인은 언제나 @ManyToOne을 사용한 쪽 → @ManyToOne에 mappedBy 속성이 없는 이유

 

6-3. 일대일[1:1]

일대일: 양쪽 테이블이 하나의 관계만 가짐

  • 주 테이블이나 대상 테이블 어느 쪽이던지 외래 키를 가질 수 있음
  • 외래 키 하나로 양쪽 조회 가능
  • 주 테이블에 외래 키
    • 주 테이블에서 대상 테이블 참조
    • 객체 참조와 비슷하게 외래키 사용 가능
    • 주 테이블만 확인해도 대상 테이블과 연관관계 확인 가능
  • 대상 테이블에 외래 키
    • 전통적인 DB 개발자들이 선호
    • JPA에서 매핑 허용X
    • 테이블간 관계를 일대일에서 일대다로 변경 시 테이블 구조 유지 가능

 

6-4. 식별자 구성

식별 관계

  • 받아온 식별자를 기본 키 + 외래 키 형태의 복합 키로 사용

비식별 관계

  • 받아온 식별자는 외래 키로만 사용, 새로운 식별자를 추가
  • 객체 입장에서 편리하게 ORM 매핑 가능 → 비식별관계 추천

'책 스터디 정리 > JPA ORM 스터디' 카테고리의 다른 글

[7장] 고급 매핑  (0) 2023.05.09
[5장] 연관관계 매핑 기초  (0) 2023.04.25
[4장] 엔티티 매핑  (0) 2023.04.18
[3장] 영속성 관리  (0) 2023.04.11
[1장] JPA 소개  (0) 2023.04.04