다양한 연관관계 매핑

유동우·2023년 8월 1일
0
post-thumbnail

다대일 [N:1]

다대일 양방향

  • 외래키가 있는 쪽이 연관관계의 주인이다
  • 주인 ? -> 주인쪽에서만 수정 가능

일대다 [1:N]

  • 일(1)이 연관관계의 주인이다
  • 테이블에서 일대다 관계는 항상 다(N)쪽에 외래키가 있다
  • 따라서 객체에서는 반대편 테이블의 외래키를 관리해야하는 특이한 구조가 형성된다
  • @JoinColumn을 사용하지 않으면 중간 테이블을 사용하여 손해를 볼 수 있다

일대다 단방향 매핑의 단점

  • 엔티티가 관리하는 외래키가 다른 테이블에 있다
  • 연관관계 관리를 위해 다른 테이블을 다루는 UPDATE SQL을 수행한다
@JoinColumn(insertable=false, updatable=false)
//읽기 전용 필드를 사용해서 양방향처럼 사용하는 방법

JPA 스펙상 공식적으로 있는것은 아니다.
실무에서는 매핑을 해놓지만, 읽기전용으로 쓰이는 경우가 필요할때가 종종 있다
=> 그냥 다대일 양방향 관계를 쓰자

일대일 [1:1]

일대일 연관관계는 내 테이블에 있는것들만 관리할 수 있다

주 테이블에 외래키 vs 대상 테이블에 외래키

  • 주 테이블에 외래 키
    JPA 매핑이 편리하다
    장점: 주 테이블만 조회해도 대상 테이블에 데이터가 있는지 확인이 가능하다
    단점 : 값이 없으면 외래키에 null 값을 허용한다
  • 대상 테이블에 외래키
    DB 개발자들이 선호
    장점 : 주 테이블과 대상 테이블을 일대일에서 일대다 관계로 변경할 때 테이블 구조 유지
    단점 : 프록시 기능의 한계로 지연로딩으로 설정해도 항상 즉시 로딩이 된다

다대다 [N:N]

실전에서는 사용하지 않는것이 좋음 !!

위 보다 아래방식으로 모든 테이블에 @GeneratedValue 깔고 가는것을 선호

실전 예제 3 - 다양한 연관관계 매핑

Reference
김영한 님 - 자바 ORM 표준 JPA 프로그래밍 - 기본편

profile
효율적이고 꾸준하게

0개의 댓글