JPA

[JPA 16] 상속관계 구현 - 클래스 별 테이블(서브타입 테이블) 전략

snowkit 2022. 3. 11. 04:35
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Item {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private Long id;
    private String name;
    private int price;
}
@Entity
public class Book extends Item {
    private String author;
    private String isbn;
}
@Entity
public class Shoes extends Item {
    private int size;
}
  • @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
  • @GeneratedValue(strategy = GenerationType.???)에 IDENTITY 사용 불가
  • 서브타입 테이블에 각각 슈퍼타입 테이블의 컬럼을 생성한다
  • 슈퍼타입 테이블이 존재하지 않는다
  • 단점
    • 얼핏 편리해 보일 수 있지만 DBA와 ORM 전문가가 전부 추천하지 않는 전략
    • 여러 자식 테이블을 함께 조회할 때 성능이 느림 (UNION SQL 필요)
    • 자식 테이블을 통합해서 쿼리하기 어려움