상속관계 매핑
- 관계형 데이터베이스에는 상속관계가 없음
- 슈퍼타입 서브타입 관계라는 모델링 기법이 그나마 객체의 상속과 유사
- 상속관계 매핑 : 객체의 상속/구조와 DB의 슈퍼타입/서브타입 관계를 매핑
총 3가지의 방법이 있다.
조인 전략은 아이템이라는 테이블을 만들고 앨범, 무비, 북 테이블을 각 각 만들고 join을 사용해서 데이터를 가지고 옴.

장점
단점
DTYPE이란 컬럼을 두어서 그게 앨범인지 무비인지 북인지 구분함.
DTYPE이 없으면 ITEM 클래스 데이터가 앨범 / 무비 / 북 중 어떤 것 때문에 들어왔는지 모름
@DiscriminatorColumn -> 부모 클래스에 이 어노테이션을 사용하면 됨
@DiscriminatorValue("Book") -> 자식 클래스에는 DTYPE 이름을 지정해줌
조인전략에서는 DTYPE 생략해도 되나 single-table 전략에서는 꼭 넣어줘야함
모든 테이블은 한 클래스에 다 때려넣음
DTYPE을 작성 안해도 단일 테이블전략을 쓰면 알아서 생성됨
조회를 할 때 join 쿼리가 필요없음

DB 설계자와 ORM 전문가 둘 다 추천하지 않음
쓰면 안된다...
DB 측면에서도 ORM 측면에서도
공통 컬럼은 테이블마다 각각 가지고 감
부모 테이블인 Item은 생성되지 않고 자식 테이블들만 생성됨
그리고 그 자식 테이블에 부모테이블의 속성이 각 각 들어감
단순하게 insert/select할 때는 좋음
시스템 변경 입장에서 볼 때 좋지않음(유지보수 어려움)
장점
단점
Album / Movie / Book 중 무엇을 조회하는 건지 딱 집어서 조회하는건 O
Movie movie = em.find(Movie.class, movie.getID());
하지만 부모 클래스(Item)으로 조회 했을 때는 모든 자식테이블을 다 뒤져봐야함
Item item = em.find(Item.class, movie.getID());

union all select로 모든 테이블을 다 조회함
