자바에서의 상속 개념을 데이터베이스에 적용을 시키기 위해서는 어떻게 하는 방법들이 있는지 인프런 김영한 강사님의 강의를 들으며 개인적으로 정리한 글입니다.
자바의 객체 지향에서는 상속이라는 것이 존재한다. 슈퍼 타입이 있고 슈퍼 타입과 관련된 서브타입이 존재하는 방식이다.
하지만 관계형 데이터베이스에는 상속의 개념은 존재하지 않는다.따라서 JPA에서는 객체 지향의 관점과 관계형 데이터 베이스에서 상속 관계 일 경우 맵핑을 지원해준다.
부모 클래스에서 PK를 정의하고, 자식 클래스에서 부모의 PK를 외래키로 사용하는 전략이다.
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "TYPE")
public class Item {
@Id @GeneratedValue
private Long id;
private String name;
private String price;
}
@Entity
@DiscriminatorValue("A")
public class Album extends Item{
private String artist;
}
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "TYPE")
@DiscriminatorValue("A")
테이블을 하나만 생성하여 부모객체, 자식객체를 데이터베이스에서는 구분을 하지 않는 전략
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "TYPE")
public class Item {
@Id @GeneratedValue
private Long id;
private String name;
private String price;
}
@Entity
@DiscriminatorValue("A")
public class Album extends Item{
private String artist;
}
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)