-
[JPA] μμκ΄κ³ 맀νκ³Ό @MappedSuperclassBack-end/JPA 2022. 4. 27. 00:00
π μμκ΄κ³ 맀ν
μμκ΄κ³ 맀νμ΄ νμν μ΄μ
- κ΄κ³ν λ°μ΄ν°λ² μ΄μ€λ μμ κ΄κ³κ° μλ€.
- λ°μ΄ν°λ² μ΄μ€μ μνΌνμ μλΈνμ κ΄κ³ λͺ¨λΈλ§ κΈ°λ²μ΄ κ°μ²΄μ μμκ³Ό μ μ¬νλ€.
- κ°μ²΄μ μμ ꡬ쑰μ λ°μ΄ν°λ² μ΄μ€μ μνΌνμ μλΈνμ κ΄κ³λ₯Ό 맀ννλ κ²μ΄ νμνλ€.
λ°μ΄ν°λ² μ΄μ€μ μνΌνμ μλΈνμ λ Όλ¦¬ λͺ¨λΈμ μ€μ 물리 λͺ¨λΈλ‘ ꡬννλ λ°©λ²
- μνΌνμ κ³Ό μλΈνμ μ κ°κ°μ ν μ΄λΈλ‘ λ³ν → μ‘°μΈ μ λ΅
- ν΅ν© ν μ΄λΈ(μλΈνμ μ μλ λͺ¨λ 컬λΌμ μνΌνμ μ νλλ‘ ν΅ν©)λ‘ λ³ν → λ¨μΌ ν μ΄λΈ μ λ΅
- μλΈνμ ν μ΄λΈλ‘ λ³ν(μλΈνμ 컬λΌμ μνΌνμ μ μλ λͺ¨λ μμ±μ ν¬ν¨νλλ‘ κ΅¬μ±) → ꡬν ν΄λμ€λ§λ€ ν μ΄λΈ μμ± μ λ΅
π κ°μ²΄ κ΄μ μ£Όμ μ΄λ Έν μ΄μ
@Inheritance(strategy = InheritanceType.XXX)
- JOINED : μ‘°μΈ μ λ΅
- SINGLE_TABLE : λ¨μΌ ν μ΄λΈ μ λ΅
- TABLE_PER_CLASS : ꡬν ν΄λμ€λ§λ€ ν μ΄λΈ μμ± μ λ΅
@DiscriminatorColumn(name = "DTYPE")
- ꡬλΆμ 컬λΌλͺ μ§μ
- default 컬λΌλͺ μ΄ "DTYPE"μ
@DiscriminatorValue("BOOK")
- @DiscriminatorColumnμμ μ€μ ν 컬λΌμ μ μ₯λ μν°ν° ν΄λμ€λ³ κ° μ§μ
π 1) μ‘°μΈ μ λ΅
- μνΌνμ (κ°μ²΄ κ΄μ μμλ λΆλͺ¨ ν΄λμ€)κ³Ό μλΈνμ (κ°μ²΄ κ΄μ μμλ μμ ν΄λμ€)μ΄ κ°κ° ν μ΄λΈλ‘ μμ±λ λ€, 1:1 μ£Όμλ³μ κ΄κ³λ‘ μ°κ²°λλ€.
- μνΌνμ ν μ΄λΈμ΄ μ΄λ μλΈνμ ν μ΄λΈκ³Ό μ°κ΄λλμ§ κ΅¬λ³νκΈ° μν΄ μνΌνμ ν μ΄λΈμμ ꡬλΆμ(μμ μ¬μ§μμ ITEMμ DTYPE)λ₯Ό κ°μ§κ³ μλ€.
μ₯μ
- μνΌνμ ν μ΄λΈμ μν μ λ³΄λ§ μ‘°ννλ κ²½μ° SQL μμ±μ΄ νΈλ¦¬νλ€.
- 컬λΌμ μ€λ³΅μ΄ μμΌλ―λ‘ μ μ₯곡κ°μ΄ μλμ μΌλ‘ μ λ€.
- κ΄κ³μ μν΄ λ°μνλ μΈλ ν€ μ°Έμ‘° λ¬΄κ²°μ± μ μ½μ‘°κ±΄ νμ©μ΄ κ°λ₯νλ€.
λ¨μ
- μνΌνμ κ³Ό μλΈνμ μ μ 보λ₯Ό κ°μ΄ μ²λ¦¬νλ©΄ νμ μ‘°μΈμ΄ λ°μν΄μΌ νλ―λ‘ μ±λ₯ μ νλ₯Ό μΌμΌν¬ μ μλ€.
- μ 체 ν μ΄λΈ(μνΌνμ , μλΈνμ λͺ¨λ)μ μ‘°ννλ κ²½μ°μ μ‘°μΈμΌλ‘ μΈν΄ μ‘°ν μΏΌλ¦¬κ° λ³΅μ‘νλ€.
- λ°μ΄ν° μ μ₯μ INSERT SQLμ 2λ² νΈμΆνκ² λλ€. (μ΄κ±΄ κ·Έλ κ² ν° λ¨μ μ΄ μλλ€..!)
π 2) λ¨μΌ ν μ΄λΈ μ λ΅
- μλΈνμ μ μλ λͺ¨λ 컬λΌμ μνΌνμ μ νλλ‘ ν΅ν©νμ¬ ν μ΄λΈλ‘ λ§λ λ€.
- κ°κ°μ μλΈνμ μ 보λ₯Ό ꡬλΆνκΈ° μν κ΅¬λΆ μ»¬λΌ(μμ κ·Έλ¦Όμμ ITEM ν μ΄λΈμ DTYPE)μ΄ νμνλ€.
μ₯μ
- μ‘°μΈμ΄ νμνμ§ μμΌλ―λ‘ μΌλ°μ μΌλ‘ μ‘°ν μ±λ₯μ΄ λΉ λ₯΄κ³ , μ‘°ν μΏΌλ¦¬κ° λ¨μνλ€.
- μλΈνμ μ ꡬλΆνμ§ μκ³ λ°μ΄ν°λ₯Ό μ‘°ννλ κ²½μ° μ²λ¦¬κ° νΈλ¦¬νλ€.
λ¨μ
- μλΈνμ
μ 컬λΌλ€μ λͺ¨λ nullμ νμ©ν΄μΌ νλ€.
- μλ₯Ό λ€μ΄, νΉμ μλΈνμ μ 컬λΌμλ Not Nullμ΄λ κΈ°λ³Έκ°μ μ§μ ν΄μΌ νμ§λ§, λ€λ₯Έ μλΈνμ μ΄ ν΄λΉ 컬λΌμ μ¬μ©νμ§ μλ κ²½μ° κ΄λ ¨ μ€μ μ ν μ μκ² λλ€.
- ν μ΄λΈμ 컬λΌμ΄ λ§μμ§λ―λ‘ λμ€ν¬ μ μ₯ 곡κ°μ΄ μ¦κ°ν μ μκ³ , νμ ꡬλΆμμ μν΄ λ°μ΄ν° rowλ₯Ό ꡬλΆν΄μΌ νλ€.
- ν μ΄λΈμ μΈλ±μ€λ₯Ό μ¬μ©ν κ²½μ° μλΈνμ κ°λ³λ³΄λ€ λ§μ μμ λ°μ΄ν°κ° μ‘΄μ¬νλ―λ‘ μΈλ±μ€ ν¬κΈ°κ° 컀μ§κ³ κ·Έμ λ°λΌ μΈλ±μ€μ ν¨μ¨μ΄ λ¨μ΄μ§ μ μλ€.
- μλΈνμ μ λ΄μ©μ ν μ€μΊν κ²½μ° λ°μ΄ν° κ°μκ° λ λ§κΈ° λλ¬Έμ μ±λ₯μ΄ λ¨μ΄μ§λ€.
- λ€λ₯Έ ν μ΄λΈκ³Ό μλΈνμ λ³λ‘ μ°Έμ‘° λ¬΄κ²°μ± μ‘°μ½μ΄ 볡μ‘ν κ²½μ° λ°μ΄ν°λ₯Ό μ²λ¦¬νκΈ° 볡μ‘νλ€.
π 3) ꡬν ν΄λμ€λ§λ€ ν μ΄λΈ μμ± μ λ΅
- μλΈνμ ν μ΄λΈμ μνΌνμ μ μλ λͺ¨λ μμ±μ ν¬ν¨νλλ‘ κ΅¬μ±νλ€.
- μλΈνμ ν μ΄λΈ κ°κ° PKλ₯Ό μμ±νλ―λ‘, μλ‘κ°μ κ΄κ³λ μ‘΄μ¬νμ§ μλλ€.
- μλΈνμ ꡬλ³μ μν ꡬλΆμκ° νμνμ§ μλ€.
- κ°μ²΄ κ΄μ μμ λΆλͺ¨ ν΄λμ€λ abstractμΌλ‘ μ€μ ν΄μΌ ν΄λΉ ν μ΄λΈμ΄ μΆκ°λ‘ μμ±λμ§ μλλ€..!
μ₯μ
- μλΈνμ λ³λ‘ ꡬλΆνμ¬ μ‘°νν κ²½μ° κ°μ ΈμμΌ ν 컬λΌμ λͺ ννκ² κ΅¬λΆνμ¬ μ²λ¦¬ν μ μλ€.
- ν μ΄λΈ ν μ€μΊμ ν κ²½μ° μ 리νλ€.
- λ€λ₯Έ ν μ΄λΈκ³Ό 볡μ‘ν μ°Έμ‘° λ¬΄κ²°μ± κ΄κ³λ₯Ό μ μ§ν μ μλ€.
- 컬λΌμ λν Not Null, κΈ°λ³Έκ° μ§μ μ΄ κ°λ₯νλ€.
λ¨μ
- μλΈνμ λ€μ ν¨κ» μ‘°νν λ(μ£Όλ‘ μνΌνμ μ μμ± μ‘°νμ) UNION SQLμ μ¬μ©ν΄ μ±λ₯μ΄ λ리λ€.
- μλΈνμ μ λ¬Άμ΄μ λΆλΆ μ²λ¦¬ ν΄μΌνλ κ²½μ° λ³΅μ‘νκ±°λ λΆκ°λ₯νλ€.
μΆκ°
- μλΈνμ λ³λ‘ ꡬλΆνμ¬ μ²λ¦¬νλ κ²½μ°κ° λ§μ κ²½μ° μ΄μ κ°μ μ€κ³λ₯Ό κ³ λ €ν΄λ³Ό μ μμ§λ§, ν΅ν©νμ¬ λ°μ΄ν°λ₯Ό μ²λ¦¬νλ κ²½μ°κ° λ§λ€λ©΄ κΆμ₯νμ§ μλλ€.
π 3κ°μ§ λ°©μ μ€ μ ν κΈ°μ€
μν©μ λ°λΌ μꡬλλ νΈλμμ μ μ±κ²©κ³Ό μμ λ°λΌ κ²°μ ν΄μΌ νλ€.
νΈλμμ μ μ±κ²©
→ λ°μ΄ν°λ₯Ό μ²λ¦¬ν λ μνΌνμ κ³Ό μλΈνμ μ 체μ λν μ²λ¦¬κ° λ§μμ§ or κ°λ³ μ²λ¦¬κ° λ§μμ§
νΈλμμ μ μ
→ κ° μν°ν°μ μ‘΄μ¬νλ λ°μ΄ν°μμ΄ λμ©λμΈμ§ μλμ§
π λ²μΈ) @MappedSuperclass
μμ κ°μ΄ κ³΅ν΅ λ§€ν μ λ³΄κ° μ‘΄μ¬ν λ μ¬μ©νλ€.
- μμκ΄κ³μ μ°κ΄ X, μν°ν° X, λ€λ₯Έ ν μ΄λΈκ³Ό 맀ν X
- ν΄λΉ ν΄λμ€λ₯Ό μμ λ°λ μμ ν΄λμ€μ 맀ν μ λ³΄λ§ μ 곡
- μ‘°ν, κ²μ λΆκ°(entityManager.find(BaseEntity) λΆκ°)
- μ£Όλ‘ μΆμ ν΄λμ€λ‘ μ μΈ
- ν μ΄λΈκ³Ό κ΄κ³ μκ³ , λ¨μν μν°ν°κ° 곡ν΅μΌλ‘ μ¬μ©νλ 맀ν μ 보λ₯Ό κ°μ§κ³ μλ μν
- μ£Όλ‘ λ±λ‘μΌ, μμ μΌ, λ±λ‘μ, μμ μ κ°μ΄ μ 체 μν°ν°μμ 곡ν΅μΌλ‘ μ¬μ©λλ μ 보λ₯Ό λͺ¨μ λ μ¬μ©
μ 리νμλ©΄,
- @MappedSuperclassκ° μ μΈλ ν΄λμ€μ μ©λλ μμμλ μΈκΈλμλ―μ΄ κ³΅ν΅μΌλ‘ μ¬μ©λλ νλμ μ½λμ μ¬μ¬μ©μ μν κ²μ΄λ€.
- @MappedSuperclassκ° μ μΈλ ν΄λμ€λ μν°ν° μ¦, νλμ ν μ΄λΈμ΄ μλκΈ° λλ¬Έμ λ€λ₯Έ ν μ΄λΈκ³Όμ 맀νμ΄ λΆκ°λ₯νλ€.
- @Entityκ° μ μΈλ μΆμ ν΄λμ€λ μ΄μ λ¬λ¦¬ μν°ν° μΆμνλ₯Ό μν΄ μ¬μ©λλ μ€μ§μ μΈ κ°μ²΄ μμ κ΄κ³μ μν°ν°μ΄λ€.
πμ°Έκ³
μΈνλ° μλ° ORM νμ€ JPA νλ‘κ·Έλλ° - κΈ°λ³ΈνΈ
λ°μ΄ν°λ² μ΄μ€ μ€κ³μ κ΅¬μΆ μ±
'Back-end > JPA' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[JPA] κ° νμ (0) 2022.04.28 [JPA] νλ‘μμ μ°κ΄κ΄κ³ κ΄λ¦¬ (0) 2022.04.28 [JPA] μ°κ΄κ΄κ³ 맀ν (0) 2022.04.14 [JPA] μν°ν° 맀ν (0) 2022.04.11 [JPA] λ±μ₯ λ°°κ²½, μ¬μ© μ΄μ , κ°λ¨ ꡬλ λ°©μ (0) 2022.03.31