๋ฐ์ํ
์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ - ๊ธฐ๋ณธํธ์ ๊ณต๋ถํ๋ฉฐ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค.
โ ์์๊ด๊ณ ๋งคํ
์ฃผ์ ์ ๋ ธํ ์ด์
- @Inheritance(strategy = InheritanceType. OOO)
- JOINED : ์กฐ์ธ ์ ๋ต
- @DiscripminatorColumn ์ ์ฉํด์ค์ ๊ตฌ๋ณํ๋๊ฒ์ด ์ข๋ค!
- SINGLE_TABLE : ๋จ์ผ ํ
์ด๋ธ ์ ๋ต
- @DiscripminatorColumn ๊ธฐ๋ณธ์ผ๋ก ์ ์ฉ๋จ!
- (์ถ์ฒํ์ง ์๋๋ค)TABLE_PER_CLASS : ๊ตฌํ ํด๋์ค๋ง๋ค ํ
์ด๋ธ ์ ๋ต
- ํ ์ด๋ธ ๋ง๋ค ๊ตฌ๋ณ๋๊ธฐ ๋๋ฌธ์ DTYPE์ ํ์๊ฐ ์์ด์ง๋ค.
- JOINED : ์กฐ์ธ ์ ๋ต
- @DiscriminatorColumn(name="DTYPE")
- ๊ธฐ๋ณธ๊ฐ์ DTYPE์ด๋ค. DTYPE์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ํฐํฐ ๋ช ์ด ์ฐํ๊ฒ ๋๋ค.
- @DiscripminatorValue("OO");
- DTYPE์ ์ํฐํฐ ๋ช ์ด ์ฐํ๋๊ฒ ์ซ๋ค๋ฉด ์ด ์ ๋ ธํ ์ด์ ์ ์ฌ์ฉํ๋ฉด ๋๋ค.
๐ ์กฐ์ธ ์ ๋ต
- ์ฅ์
- ํ ์ด๋ธ ์ ๊ทํ
- ์ธ๋ ํค ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ ์ ์ฝ์กฐ๊ฑด ํ์ฉ๊ฐ๋ฅ
- ์ ์ฅ๊ณต๊ฐ ํจ์จํ
- ๋จ์
- ์กฐํ์ ์กฐ์ธ์ ๋ง์ด ์ฌ์ฉ, ์ฑ๋ฅ ์ ํ
- ์กฐํ ์ฟผ๋ฆฌ๊ฐ ๋ณต์กํจ
- ๋ฐ์ดํฐ ์ ์ฅ์ INSERT SQL 2๋ฒ ํธ์ถ
@Entity
@Inheritance(strategy = InheritanceType.JOINED) // ์กฐ์ธ ์ ๋ต์ด๊ธฐ ๋๋ฌธ์ joined๋ก ์ค์ ํด์ฃผ์ด์ผํ๋ค.
@DiscriminatorColumn // ๊ธฐ๋ณธ๊ฐ์ด name = "DTYPE"
public abstract class Item {
@Id @GeneratedValue
private Long id;
private String name;
private int price;
// getter, setter ์๋ต
}
----- ๊ณตํต ๋ถ๋ถ ์ํฐํฐ -----
@Entity
@DiscriminatorValue("A") // DTYPE์ ์ํ์ง ์๋ ๊ฒฝ์ฐ ์ปค์คํ
ํ ์ ์๋ค.
public class Album extends Item{
private String artist;
}
@Entity
@DiscriminatorValue("B")
public class Book extends Item{
private String author;
private String isbn;
}
@Entity
@DiscriminatorValue("M")
public class Movie extends Item{
private String director;
private String actor;
//getter,setter ์๋ต
}
๐ ๋จ์ผ ํ ์ด๋ธ ์ ๋ต
- ์ฅ์
- ์กฐ์ธ์ด ํ์ ์์ผ๋ฏ๋ก ์ผ๋ฐ์ ์ผ๋ก ์กฐํ ์ฑ๋ฅ์ด ๋น ๋ฆ
- ์กฐํ ์ฟผ๋ฆฌ๊ฐ ๋จ์ํจ
- ๋จ์
- ์์ ์ํฐํฐ๊ฐ ๋งคํํ ์ปฌ๋ผ์ ๋ชจ๋ null ํ์ฉ
- ๋จ์ผ ํ ์ด๋ธ์ ๋ชจ๋ ๊ฒ์ ์ ์ฅํ๋ฏ๋ก ํ ์ด๋ธ์ด ์ปค์ง ์ ์๋ค. ์ํฉ์ ๋ฐ๋ผ์ ์กฐํ ์ฑ๋ฅ์ด ์คํ๋ ค ๋๋ ค์ง ์ ์๋ค.
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn // ๊ธฐ๋ณธ์ ์ฉ!
public abstract class Item {
@Id @GeneratedValue
private Long id;
private String name;
private int price;
// getter, setter ์๋ต
}
๐ ๊ตฌํ ํด๋์ค๋ง๋ค ํ ์ด๋ธ ์ ๋ต
์ด ์ ๋ต์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ณ์์ ORM ์ ๋ฌธ๊ฐ ๋ ๋ค ์ถ์ฒ X
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Item {
@Id @GeneratedValue
private Long id;
private String name;
private int price;
// getter, setter ์๋ต
}
๋ฐ์ํ