less than 1 minute read

관계형 데이터 베이스는 상속관계 개념이 존재하지않아 슈퍼 타입과 서브 타입의 논리 모델을 실제 물리 모델로 구현하는 방법 3가지가 존재

  1. 각각 테이블로 변환 → 조인 전략
  2. 통합 테이블로 변환 → 단일 테이블 전략
    • 하나의 테이블에 모든 컬럼을 집어넣고 dtype으로 구분
      • 쿼리가 한번에
      • 성능상 이점 존재
  3. 서브타입 테이블로 변환 → 구현 클래스마다 테이블 전략

@Ingeritance로 테이블 전략 선택

@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@Inheritance(strategy = InheritanceType.JOINED)

장점: 테이블의 전략선택이 쉬워진다


@Discriminator → DB테이블에 dtype 설정

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

@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)

ㅈ장점: 단순 쿼리 사용에 이점이있음

단점: 쿼리 조회시 모든 테이블을 union하여 찾음 → 테이블 수가 많으면 굉장한 오버헤드 발생


상속관계 매핑

슈퍼클래스 선언

@MappedSuperclass

특정 컬럼을 다른 테이블들에서 같이 사용하고 싶을때 사용

엔티티가 공통으로 사용하는 매핑 정보를 모으는 역할

상속 관계 매핑 X

엔티티 X, 테이블과 매핑 X

부모 클래스를 상속받는 자식클래스에 매핑 정보만 제공 → 직접 접근 할 수 없음

직접 생성해서 사용할 일 없으므로 추상클래스 권장

Updated: