객체에는 상속관계가 존재하지만, 관계형 데이터베이스에는 상속 관계가 대부분 없다.
슈퍼타입 서브타입 관계라는 모델링 기법이 객체의 상속과 유사하다.
상속관계 매핑이라는 것은 객체의 상속 구조와 DB의 슈퍼타입 서브타입 관계를 매핑하는 것
슈퍼타입 서브타입 논리 모델 → 물리모델
Item.class
@Entity
@Inheritance(strategy = InheritanceType.XXX) // 상속 구현 전략 선택
public class Item {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private int price;
}
Album.class
@Entity
public class Album extends Item {
private String artist;
}
Movie.class
@Entity
public class Movie extends Item {
private String director;
private String actor;
}
Book.class
@Entity
public class Book extends Item {
private String author;
private String isbn;
}
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn // 하위 테이블의 구분 컬럼 생성(default = DTYPE)
public class Item {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private int price;
}
[Spring JPA] 상속 ( JOINED 전략을 중심으로 )
@DiscriminatorValue 으로 뽑아낸 걸
자식에서 조회했을 때 FeedType이라는 enum을 넘겨주고싶었다.
하지만 부모에서 가지고있는데 어케하지?
@Transient를 이용해서 그냥 디비에 값이 중복되지않게 하고
Enum타입을 자식에 주고 그걸로 조회했다.
@Transient
@Column(name = "feed_type")
@Enumerated(EnumType.STRING)
private FeedType feedType;
이렇게!