<aside> ❗

상속 관계 매핑

image.png



<aside> ❗

조인전략

image.png

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Item {

		@Id @GeneratedValue
		private Long id;
		
		private String name;
		
		private int 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;
}


장점

단점



**** 조인 전략이 가장 정석 전략 ****객체랑 잘 맞음, 정규화 가능, 깔금하게 설계 가능

→ 상황에 따라 단일 테이블 전략을 쓰지만 일반적으로 가장 잘 맞는게 조인 전략

<aside> ❗

단일 테이블 전략

image.png

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Item {

		@Id @GeneratedValue
		private Long id;
		
		private String name;
		
		private int price;
	
}
/*
create table Item (
        price integer not null,
        id bigint not null,
        DTYPE varchar(31) not null,
        actor varchar(255),
        artist varchar(255),
        author varchar(255),
        director varchar(255),
        isbn varchar(255),
        name varchar(255),
        primary key (id)
    )

*/


장점

단점

<aside> ❗

구현 클래스마다 테이블 전략 - 안 쓰는게 좋은 전략

image.png

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Item {

		@Id @GeneratedValue
		private Long id;
		
		private String name;
		
		private int price;
	
}
/*
Hibernate: 
    create table Album (
        price integer not null,
        id bigint not null,
        artist varchar(255),
        name varchar(255),
        primary key (id)
    )
Hibernate: 
    create table Book (
        price integer not null,
        id bigint not null,
        author varchar(255),
        isbn varchar(255),
        name varchar(255),
        primary key (id)
    )
Hibernate: 
    create table Movie (
        price integer not null,
        id bigint not null,
        actor varchar(255),
        director varchar(255),
        name varchar(255),
        primary key (id)
    )
*/


이 전략은 데이터베이스 설계자와 ORM 전문가 둘 다 추천 X

장점

단점

<aside> ❗

주요 어노테이션

@Entity
@DiscriminatorValue("A") // DTYPE 컬럼에 A가 저장됨
public class Album extends Item {
		private String artist;
}

</aside>

<aside> ❗

기타

<aside> ❗

</aside>

<aside> ❗

</aside>

<aside> ❗

</aside>