JPA_Chap07_다양한 연관관계 매핑

윤일권·2023년 5월 8일
0

JPA

목록 보기
5/11

상속 관계 매핑

  • ORM에서 이야기하는 상속 관계 매핑은 객체의 상속 구조와 데이터베이스의 슈퍼 타입 서브타입 관계를 매핑하는 것.
  • 슈퍼 타입 서브타입 논리 모델을 실제 물리 모델인 테이블로 구현
    • 각각의 테이블로 변환
    • 통합 테이블로 변환
    • 서브타입 테이블로 변환

조인 전략

  • 엔티티 각각을 모두 테이블로 만들고 자식 테이블이 부모 테이블의 기본키를 받아서 기본 키 + 외래 키로 사용하는 전략 -> 조회할 때 자주 사용.
  • 장점
    • 테이블이 정규화
    • 외래 키 참조 무결성 제약 조건을 활용
    • 저장공간을 효울적으로 사용
  • 단점
    • 조회할 때 조인이 많이 사용되므로 성능이 저하
    • 조회 쿼리가 복잡
    • 데이터를 등록할 INSERT SQL을 두 번 실행

단일 테이블 전략

  • 테이블을 하나만 사용

  • 장점

    • 조인이 필요 없으므로 일반적으로 조회 성능이 빠름
    • 조회 쿼리가 단순
  • 단점

    • 자식 엔티티가 매핑한 컬럼은 모두 null을 허용해야한다.'
    • 단일 테이블에 모든 것을 저장하므로 테이블이 커질 수 있다.

구현 클래스마다 테이블 전략

  • 자식 엔티티마다 테이블을 만든다.
  • 장점
    • 서브 타입을 구분해서 처리할 때 효과적이다.
    • not nulll 제약 조건을 사용할 수 있다.
  • 단점
    • 여러가지 테이블을 함께 조회할 때 성능이 느리다.
    • 자식 테이블을 통합해서 쿼리하기 어렵다

@MappedSuperclass

  • 부모 클래스는 매핑하지 않고 부모 클래스를 상속 받는 자식 클래스에게 매핑 정보만 제공하고 싶으면 @MappedSuperclass를 사용.
  • 특징
    • 테이블과 매핑되지 않고 자식 클래스에 엔티티의 매핑 정보를 상속하기 위해 사용
    • @MappedSuperclass로 지정한 클래스틑 엔티티가 아니므로 em.find() 나JSQL에서 사용할 수 없다.
    • 이 클래스를 직접 생성해서 사용할 일은 거의 없으므로 추상 클래스로 만드는 것을 권장한다.

복합 키와 식별 관계 매핑

식별 관계 vs 비식별 관계

  • 식별관계
    • 부모 테이블의 기본 키를 내려 받아서 자식 테이블의 기본키 + 외래키로 사용하는 관계.
  • 비식별 관계
    • 부모 테이블의 기본 키를 받아서 자식 테이블의 외래 키로만 사용하는 관계
    • 필수적 비식별 관계 : 외래 키에 NULL을 허용하지 않는다. 연관관계를 필수적으로 맺어야 한다.
    • 선택적 비식별 관계 : 외래 키에 NULL을 허용한다. 연관관계를 맺을지 말지 선택할 수 있다.

조인 테이블

  • 조인컬럼 사용 : 테이블 간에 관게는 주로 조인 컬림이라 부르는 외래 키 컬럼을 사용해서 관리
  • 조인 테이블 사용 : 연관관계를 관리하는 조인 테이블을 추가하고 여기서 두 테이블의 외래 키를 가지고 연관관계를 관리.
    • 일대일, 일대다, 다대일, 다대다

엔티티 하나에 여러 테이블 매핑

  • @SecondaryTable을 사용하면 한 엔티티에 여러 테이블을 매핑할 수 있다.
profile
생각하는 개발자가 되겠습니다!!

0개의 댓글