장점 : 조인이 필요가없다. 성능빠름, 조회쿼리가 단순함
단점 : 자식 entity가 안가지는 컬럼의 값을 null 허용해야함....(치명적, DBA 개빡침), 테이블이 커질수있다. 오히려 역효과 날수 있다.
상속을 받아서 테이블을 만들수도 있다.
기본적으로 @Entity는 당연히 써줘야 하는거고.
단순히 Movie클래스가 Item 클래스를 extends로 상속받는다고 입력하면 됨.
그리고 부모에 @Inheritance를 입력하면 default 값으로 상속 타입을 SINGLE_TABLE을 사용한다.
그럼 성능상 좋긴하다.
그리고 싱글 타입은 DTYPE이라고 자동 생성을해준다.
무슨 클래스를 가져왔는지 표시를 해준다는 것이다.
실행해보면 테이블 생성시 DTYPE이라고 자동 생성된다.
그리고 DTYPE이 아니라 컬럼명을 바꾸고 싶다면 @DiscriminatorColumn(name="~~~") 을 써주면 된다.
진짜 너무 JPA에서 자동으로 이놈이 무슨클래스지, 어디서 온놈이지? 라는것을 자동으로 생각해주니까 좀 이상하다.
적응이 안된다.
설마 이것까지 자동으로 해줄까? 라는 의심을 품고 실행하면 해주고 있다.
테이블을 DB에서 쿼리칠 필요가 없어서 미친듯이 편하다. 이런 미띤 ㅡㅡ
아래는 싱글 테이블 실습.
create table Item (
TYPE_NAME varchar(31) not null,
id bigint not null,
name varchar(255),
price integer not null,
artist varchar(255),
autor varchar(255),
isbn varchar(255),
actor varchar(255),
director varchar(255),
primary key (id)
)
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="TYPE_NAME")
public class Item {
@Id
@GeneratedValue
private Long id;
private String name;
private int price;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
@Entity
@DiscriminatorValue("MV")
public class Movie extends Item{
private String director;
private String actor;
public String getDirector() {
return director;
}
public void setDirector(String director) {
this.director = director;
}
public String getActor() {
return actor;
}
public void setActor(String actor) {
this.actor = actor;
}
}
'Developer' 카테고리의 다른 글
[JPA] 상속매핑(Inheritance) 전략 - TABLE_PER_CLASS (0) | 2020.09.19 |
---|---|
[JPA] 상속매핑(Inheritance) 전략 - JOINED* (0) | 2020.09.19 |
[JPA]연관관계의 주인을 어떻게 정할까 (0) | 2020.09.18 |
[JPA]identity전략 특성 (0) | 2020.09.18 |
[JPA]DDL 생성기능 (0) | 2020.09.16 |