HyeLog
[κΉμν_μλ° ORM νμ€ JPA νλ‘κ·Έλλ° - κΈ°λ³ΈνΈ] 6. κ³ κΈ λ§€ν(μμκ΄κ³ 맀ν) λ³Έλ¬Έ
[κΉμν_μλ° ORM νμ€ JPA νλ‘κ·Έλλ° - κΈ°λ³ΈνΈ] 6. κ³ κΈ λ§€ν(μμκ΄κ³ 맀ν)
shj718 2022. 6. 14. 00:07π©π§π¦ μμκ΄κ³ 맀ν
κ΄κ³ν λ°μ΄ν°λ² μ΄μ€μλ 'μμκ΄κ³'μ λΉμ·ν κ°λ μΈ 'μνΌνμ μλΈνμ κ΄κ³'κ° μλ€. μ΄κ²μ κ°μ²΄ μμκ³Ό 맀ννλ μ λ΅μ λν΄ μμ보μ.
'μνΌνμ μλΈνμ κ΄κ³'λ₯Ό μ€μ λ‘ ν μ΄λΈλ‘ ꡬννλ λ°©λ²μ 3κ°μ§κ° μλ€.
1) μ‘°μΈ μ λ΅
2) λ¨μΌ ν μ΄λΈ μ λ΅
3) ꡬν ν΄λμ€λ§λ€ ν μ΄λΈ μ λ΅
πΏ λ¨μΌ ν μ΄λΈ μ λ΅
μ΄μ μν°ν°λ₯Ό λ§λ€μ΄λ³΄μ. μλμ κ°μ΄ μν°ν°λ₯Ό λ§λ€λ©΄, λν΄νΈλ‘ λ¨μΌ ν μ΄λΈ μ λ΅μ΄ μ νλλ€.
@Entity
public class Item {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String 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;
}
쿼리문μ 보면, Item ν μ΄λΈ νλμ λͺ¨λ 컬λΌμ΄ λ€μ΄κ° κ²μ νμΈν μ μλ€.
λ¨μΌ ν μ΄λΈ μ λ΅μ λͺ μνκ³ μΆλ€λ©΄, @Inheritance μ΄λ Έν μ΄μ μ λΆμ¬μ νμ μ SINGLE_TABLEλ‘ μ νλ©΄ λλ€.
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn // λ¨μΌ ν
μ΄λΈ μ λ΅μμλ μλ΅ν΄λ μλμΌλ‘ DTYPE 컬λΌμ΄ μμ±λ¨. μλμμ μ€λͺ
public class Item {
+ Item κ°μ²΄λ₯Ό λ°λ‘ μμ±ν μΌμ΄ μλ€λ©΄, μΆμ ν΄λμ€λ‘ λ§λλ κ²μ΄ μ’λ€. (μ£Όλ‘ Book, Album, Movie κ°μ²΄λ₯Ό μμ±ν¨)
π μ‘°μΈ μ λ΅
Item μν°ν°μ @Inheritance μ΄λ Έν μ΄μ μ λΆμ¬μ νμ μ JOINEDλ‘ μ€μ νλ©΄ Item, Album, Movie, Book ν μ΄λΈμ΄ λͺ¨λ μμ±λκ³ Album, Movie, Book ν μ΄λΈμ κΈ°λ³Έν€μ΄μ μΈλν€λ λͺ¨λ Itemμ κΈ°λ³Έν€λ‘ μ€μ λλ€.
@DiscriminatorColumn μ λΆμ΄λ©΄ ITEM ν μ΄λΈμ 'DTYPE' 컬λΌμ΄ μκΈ΄λ€. μ΄ μ»¬λΌμ μ¨λ² / λ¬΄λΉ / λΆ μ ꡬλΆν΄μ£Όλ 컬λΌμΌλ‘, μ¬μ©νλ κ²μ΄ μ’λ€. name μμ±μΌλ‘ μ»¬λΌ μ΄λ¦μ DTYPEμ΄ μλ λ€λ₯Έ κ²μΌλ‘ μ§μ ν μλ μλ€.
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn
public class Item {
κ·ΈλΌ DTYPE 컬λΌμλ μ΄λ€ κ°μ΄ λ€μ΄κ°κΉ? λν΄νΈλ μν°ν°λͺ μ΄λ€. νμ§λ§, μλμ κ°μ΄ @DiscriminatorValueλ‘ μν°ν°λ§λ€ μ§μ ν μ μλ€. μ΄μ Movie μν°ν°λ₯Ό νλ μμ±νλ©΄, Item ν μ΄λΈμλ DTYPEμ΄ 'M'μΈ λ°μ΄ν°κ° λ€μ΄κ° κ²μ΄λ€.
@Entity
@DiscriminatorValue("M")
public class Movie extends Item {
private String director;
private String actor;
}
π ꡬν ν΄λμ€λ§λ€ ν μ΄λΈ μ λ΅
ꡬν ν΄λμ€λ§λ€ ν μ΄λΈ μ λ΅μ μ¬μ©νλ €λ©΄, strategyλ₯Ό TABLE_PER_CLASSλ‘ μ€μ νλ©΄ λλ€.
μ΄λ Item μν°ν°λ λ°λμ μΆμ(abstract) ν΄λμ€μ¬μΌ νλ€.
μ΄λ κ² νλ©΄ DBμλ Album, Movie, Book ν μ΄λΈλ§ λ§λ€μ΄μ§κ³ Item ν μ΄λΈμ μμ λ§λ€μ΄μ§μ§ μλλ€.
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Item {
π©π» κ²°λ‘
μ 리νμλ©΄, μ‘°μΈ μ λ΅μ΄ κ°μ₯ μ μμ΄λΌκ³ ν μ μλ€. μ‘°μΈ μ λ΅μ κΈ°λ³ΈμΌλ‘ μκ°νμ. λ¨μΌ ν μ΄λΈ μ λ΅μ λΉμ¦λμ€μ μΌλ‘ μμ£Ό λ¨μν λ°μ΄ν°μΌ λ μ¬μ©νλ©΄ μ’λ€. ꡬν ν΄λμ€λ§λ€ ν μ΄λΈ μ λ΅μ λ¨μ μ΄ λ§κΈ° λλ¬Έμ μ¬μ©νμ§ μλ κ²μ μΆμ²νλ€.