κ³ κΈ λ§€ν (μμκ΄κ³ 맀ν)
κ΄κ³ν λ°μ΄ν°λ² μ΄μ€μλ μμ κ΄κ³κ° μλ€. λ€λ§ λ Όλ¦¬μ μΌλ‘ μνΌνμ μλΈνμ κ΄κ³λΌλ λͺ¨λΈλ§ κΈ°λ²μ΄ κ°μ²΄μ μμκ³Ό μ μ¬νλ€. μμκ΄κ³ 맀νμ΄λ, κ°μ²΄μ μμꡬ쑰μ DB μ μνΌνμ μλΈνμ κ΄κ³λ₯Ό 맀ννλ κ²μΌλ‘, 3κ°μ§ μ λ΅μΌλ‘ 맀νν μ μλ€.
π₯ μ£Όμ μ΄λ Έν μ΄μ
μ΄λ Έν μ΄μ | μ€λͺ | μ λ΅ |
---|---|---|
@Inheritance | μμκ΄κ³λ₯Ό 맀νν λ λΆλͺ¨ ν΄λμ€μ λ¬μμ€μΌ νλ€. | JOINED: μ‘°μΈ μ λ΅, SINGLE_TABLE : λ¨μΌ ν μ΄λΈ μ λ΅, TABLE_PER_CLASS : ꡬν ν΄λμ€λ§λ€ ν μ΄λΈμ μμ±νλ μ λ΅ |
@DiscriminatorColumn(name=βDTYPEβ) | λΆλͺ¨ ν΄λμ€μ λ¬μμ€λ€. DBμμλ μμκ΄κ³κ° μκΈ° λλ¬Έμ insertλ λ°μ΄ν°κ° μ΄λ€ μλΈνμ μ λ°μ΄ν°μΈμ§ νμΈνκΈ°κ° μ΄λ ΅λ€. κ·Έλμ DTYPE μ λ°λ‘ μ€μ νμ¬ μ΄μμμ νμΈνκΈ° νΈνκ² νλ€. | name μ μ무거λ λ£μ΄λ μκ΄μμ§λ§ default κ° DTYPE μ΄κΈ°λ νκ³ λ³΄ν΅ DTYPE μ μ΄λ€. |
@DiscriminatorValue(βnameβ) | μμ ν΄λμ€μ λ¬μμ€λ€. μνΌνμ μ insert λ DTYPE μ΄λ¦μ μ€μ ν μ μλ€. νμλ μλ. | default λ‘λ ν΄λμ€λͺ μ΄ λ€μ΄κ°λ€. |
𧩠γμ‘°μΈ μ λ΅
μΆμ²: μλ° ORM νμ€ JPA νλ‘κ·Έλλ° - κΈ°λ³ΈνΈ (μΈνλ°)
Β
μνΌνμ μ PK λ₯Ό μλΈνμ μ΄ FK λ‘ μ°Έμ‘°νλ κ΅¬μ‘°λ‘ μ€κ³ν κ²½μ° μ‘°μΈ μ λ΅μ μ¬μ©ν μ μλ€.
μΈλ ν€ μ°Έμ‘° λ¬΄κ²°μ± μ μ½μ‘°κ±΄μ νμ©ν μ μλ€λ μ₯μ μ΄ μλ€.
// μνΌ νμ
(λΆλͺ¨ ν΄λμ€) : λΆλͺ¨ ν΄λμ€λ₯Ό μ¬μ©ν μΌμ΄ μμ κ²½μ° μΆμ ν΄λμ€λ‘ μ μΈνλ€.
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn
public abstract 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;
}
Β
𧩠γλ¨μΌ ν μ΄λΈ μ λ΅
μΆμ²: μλ° ORM νμ€ JPA νλ‘κ·Έλλ° - κΈ°λ³ΈνΈ (μΈνλ°)
Β
λͺ¨λ μλΈ νμ μ μΉΌλΌμ λΆλͺ¨ νμ μ ν©μ³μ λ¨μΌ ν μ΄λΈλ‘ μ€κ³ν κ²½μ°μλ λ¨μΌ ν μ΄λΈ μ λ΅μ μ¬μ©νλ€.
μ΄ κ²½μ°μλ μ‘°μΈμ΄ νμ μμΌλ―λ‘ μΌλ°μ μΌλ‘ μ‘°ν μ±λ₯μ΄ λΉ λ₯΄κ³ , μΏΌλ¦¬κ° λ¨μνλ€.
λ€λ§, μμ ν΄λμ€κ° 맀ννλ 컬λΌμ λͺ¨λ null μ νμ©ν΄μΌ νλ€λ λ¨μ μ΄ μλ€.
λ¨μΌ ν μ΄λΈ μ λ΅μ κ²½μ°, μλ³μ μν DTYPE μ΄ λ°λμ νμν΄μ κ°λ°μκ° μ€μ νμ§ μμλ νμ΄λ²λ€μ΄νΈκ° μλμΌλ‘ μμ±νλ€.
// μνΌ νμ
(λΆλͺ¨ ν΄λμ€)
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn
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;
}
Β
𧩠γꡬν ν΄λμ€λ§λ€ ν μ΄λΈ μμ± μ λ΅
μΆμ²: μλ° ORM νμ€ JPA νλ‘κ·Έλλ° - κΈ°λ³ΈνΈ (μΈνλ°)
Β
μλΈ νμ μ μνΌ νμ μ μΉΌλΌμ μ λΆ λ£μ΄μ κ°κ° λ³κ°μ ν μ΄λΈμ μμ±νλ κ²½μ° μ¬μ©ν μ μλ μ λ΅μ΄λ€.
κ·Έλ¬λ μΌλ°μ μΌλ‘ κΆμ₯λμ§ μλλ€ β¦
Β
π₯ γ@MappedSuperclass
μμ κ΄κ³μμ μ¬μ©νλ 맀νμ μλ β
λͺ¨λ ν΄λμ€μμ 곡ν΅μΌλ‘ μ¬μ©νλ 맀ν μ λ³΄κ° μμ λ μ€λ³΅ μ λ ₯μ΄ νλ€κΈ° λλ¬Έμ λ°λ‘ ν΄λμ€λ₯Ό λ§λ€μ΄ μμλ°λ νμμΌλ‘ μ¬μ©νκ² λλλ°, κ·Έλ΄ λ λΆμ΄λ μ΄λ Έν μ΄μ μ΄λ€.
κ³΅ν΅ λ§€ν μ 보λ₯Ό λ΄μ ν΄λμ€λ μ§μ μμ±ν΄μ μ¬μ©ν μΌμ΄ μμΌλ―λ‘ abstract μΌλ‘ λ§λλ κ²μ κΆμ₯νλ€.
λ§μ°¬κ°μ§λ‘ κ·Έμ κ³΅ν΅ μ λ³΄λ§ λ€μ΄μλ ν΄λμ€μ΄κΈ° λλ¬Έμ μν°ν°κ° μλκ³ , ν μ΄λΈκ³Ό 맀ννλκ² μλλ€.
// κ³΅ν΅ μ 보 ν΄λμ€
@MappedSuperclass
public abstract class BaseEntity {
private String createdBy;
private LocalDateTime createdDate;
}
// κ³΅ν΅ μ 보λ₯Ό μ¬μ©νλ ν΄λμ€λ€μ μ λΆ μμλ°μμ μ¬μ©
@Entity
@Inheritance
public class Item extends BaseEntity {
@Id @GeneratedValue
private Long id;
private String name;
private int price;
}