연관관계 매핑 고려사항 3가지

  • 다중성
    • 1:n, n:m(실무에서 x), n:1, 1:1
  • 단방향, 양방향
    • 테이블: 외래키 하나로 양쪽 조인 가능(방향 개념 x)
    • 객체 : 참조용 필드가 있어야 참조 가능(방향 개념 o)
  • 연관관계 주인
    • 테이블 : 외래키 하나로 두 테이블이 연관관계 맺음
    • 객체 : 양방향 관계는 A→B, B→ A와 같이 참조가 2개 = 외래키 관리할 곳(연관관계 주인) 필요 

다대일(N:1)

N 쪽이 외래키 관리(연관관계 주인)

  • 다대일 단방향
    • @ManyToOne + @JoinColumn(name = "TEAM_ID")
  • 다대일 양방향 : 외래키 있는 쪽이 연관관계 주인, 항상 서로 참조 필수
    • @ManyToOne + JoinColumn(name = "TEAM_ID") → 연관관계 주인
    • @OneToMany(mappedBy="team")

일대다(1:N)

엔티티를 하나 이상 참조할 수 있으므로 자바 컬렉션(Collection, Map, List, Set) 중 하나 사용

  • 일대다 단방향 : 반대쪽 테이블에 있는 외래키 관리(외래키가 N쪽 테이블에 있어서) → 단점
    • @OneToMany + @JoinColumn(name="TEAM_ID") → Member 테이블의 TEAM_ID(FK)
  • 일대다 양방향 : 다대일 양방향 매핑 사용 권장 
    • @OneToMany + @JoinColumn(name="TEAM_ID")
    • @ManyToOne + @JoinColumn(name = "TEAM_ID", insertable=false, updatable=false) → 읽기만 가능하도록 설정

일대일(1:1)

  • 주 테이블에 외래키, 일대일 단방향
    • @OneToOne + JoinColumn(name = "LOCKER_ID")
  • 주 테이블에 외래키, 일대일 양방향
    • @OneToOne + JoinColumn(name = "LOCKER_ID") → 연관관계 주인
    • @OneToOne(mappedBy="locker")
  • 대상 테이블에 외래키, 일대일 단방향 : 지원 X
  • 대상 테이블에 외래키, 일대일 양방향 
    • @OneToOne(mappedBy="member")
    • @OneToOne + @JoinColumn(name = "MEMBER_ID")

다대다(N:N)

중간에 연결 테이블(엔티티)을 추가해서 활용, 실무X

'JPA' 카테고리의 다른 글

고급 매핑  (0) 2025.05.01
연관관계 매핑 기초  (0) 2025.05.01
엔티티 매핑  (0) 2025.05.01
JPA 소개 / 영속성 관리  (0) 2025.05.01

+ Recent posts