관계형 데이터베이스는 상속 관계가 없다
그나마 슈퍼타입 서브타입 관계라는 논리적 모델링 기법이 객체 상속과 유사하다
상속관계 매핑은 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑한다. 3가지 전략을 사용할 수 있다
조인 전략 : 슈퍼타입 서브타입을 별도 테이블로 둔다
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "ITEM_TYPE")
public class Item {
@Id @GeneratedValue
private Long id;
private String name;
private Integer price;
}
@Entity
public class Album extends Item {
private String artist;
}
@Entity
public class Movie extends Item {
private String director;
private String actor;
}
@Entity
public class Book extends Item [
private String author;
private String ISBN;
}
단일 테이블 전략 : 하나의 테이블에 모든 정보를 담는다
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "ITEM_TYPE")
public class Item {
@Id @GeneratedValue
private Long id;
private String name;
private Integer price;
}
@Entity
public class Album extends Item {
private String artist;
}
@Entity
public class Movie extends Item {
private String director;
private String actor;
}
@Entity
public class Book extends Item [
private String author;
private String ISBN;
}
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Item {
@Id @GeneratedValue
private Long id;
private String name;
private Integer price;
}
@Entity
public class Album extends Item {
private String artist;
}
@Entity
public class Movie extends Item {
private String director;
private String actor;
}
@Entity
public class Book extends Item [
private String author;
private String ISBN;
}
@MappedSuperclass
public abstract class BaseEntity {
private LocalDateTime createdAt;
private LocalDateTime updatedAt = createdAt;
}
@Entity
public class User extends BaseEntity {
...
}
@Entity
public class Ticket extends BaseEntity {
...
}