π€ μμκ΄κ³ 맀ν?
κ΄κ³ν λ°μ΄ν°λ² μ΄μ€λ μμκ΄κ³λΌλ κ°λ
μ΄ μλ€.
νμ§λ§ μνΌνμ
κ³Ό μλΈνμ
κ΄κ³λΌλ λͺ¨λΈλ§ κΈ°λ²μ΄ κ°μ²΄μ μμκ³Ό μ μ¬νκΈ° λλ¬Έμ μ΄μ μ μ΄μ©νμ¬ μμκ΄κ³ 맀νμ νκ³ μλ€.
(κ°μ²΄μ μμ ꡬ쑰μ DBμ μνΌνμ
μλΈνμ
κ΄κ³λ₯Ό 맀ν)
DBμμ μνΌνμ κ³Ό μλΈνμ μ λ Όλ¦¬λͺ¨λΈμ λμμΈ νμλ μ€μ 물리 λͺ¨λΈλ‘ ꡬννλ μ λ΅μ 3κ°μ§κ° μλ€.
β μ‘°μΈμ λ΅(JOINED)
κ°μ₯ μ κ·νλ λ°©λ²μΌλ‘ κ°ν μ΄λΈμ joinνλ λ°©μμΌλ‘ λ°μ΄ν° λ₯Ό μ μ₯νκ²λλ©° λ°μ΄ν°κ° μ κ·ν λμ΄ μ μ₯λκΈ° λλ¬Έμ μ€λ³΅λλ λ°μ΄ν°(name, price)λ₯Ό μ€μΌ μ μκ³ , κ°μ²΄μ κ΄κ³μ κ°μ₯ μ μ¬νλ€.
@Inheritance(strategy = InheritanceType.JOINED)κ³Ό κ°μ²΄μ μμ(extends)μ μ¬μ©νμ¬ λ§€ννλ€.
μ λͺ¨λΈλ§ μ²λΌ μνΌνμ
, μλΈνμ
κ΄κ³λ‘ μ κ·νλμ΄ μ μ₯λμ΄μ§κ³ , selectνκ²λλ©΄ joinμ ν΅ν΄ λ°μ΄ν°λ₯Ό κ°μ§κ³ μ¨λ€.
DTYPEμ΄ μλ΅ λμλλ° μΌλ°μ μΌλ‘ λ£μ΄μ£Όλ κ²μ΄ μ’λ€ @DiscriminatorColumn( name ="D_TYPE" )μ μ¬μ©νμ¬ columnλͺ
κ³Ό ν¨κ» μ€μ ν μ μλ€.
μ€μ ν΄μ£Όλ©΄ κΈ°λ³Έκ°μΌλ‘ Entityλͺ
μ΄ νμ
μΌλ‘ λ€μ΄κ°κ² λλλ° DBλ§ λ΄€μλ μ΄λ€ Entityλ₯Ό ν΅ν΄μ insertλκ±΄μ§ μκΈ° μν΄μ λ£μ΄μ£Όλκ²μ΄ μ’λ€.
(@DiscrimatorValue("xxx") λ₯Ό ν΅ν΄μλ λ±λ‘λλ Entityλͺ
μ λ³κ²½ν μ μλ€.)
β λ¨μΌ ν μ΄λΈ μ λ΅
νλ‘μ νΈκ° λ¨μνκ³ , ν ν μ΄λΈλ‘ μ€κ³κ° κ³ λ €λ λ μ¬μ©ν μ μλ€.
selectμΏΌλ¦¬κ° joinνμ§μκ³ λκ°κ³ , insert쿼리λ ν
μ΄λΈμ΄ νλμ΄κΈ° λλ¬Έμ νλ²λ§ μμ²νκ² λλ€ μ΄λ¬ν μ μΌλ‘ μ±λ₯μ μ΄μ μ μ»κΈ° μν΄ κ³ λ €ν μ μλ€.
λ¨μΌ ν
μ΄λΈ μ λ΅μ DiscrimatorColumnμ΄ μμ΄λ DTYPE컬λΌμ΄ λν΄νΈλ‘ μμ±λμ΄μ§λ€.
μ‘°μΈ μ λ΅μμλ DTYPEμ΄ μλλΌλ ν
μ΄λΈμ μ‘°μΈν΄μ μμλΌ μ μμ§λ§ λ¨μΌ ν
μ΄λΈ μ λ΅μ μ΄λ€ νμ
μΈμ§ μ μ μκΈ°λλ¬Έμ νμλ‘ λ€μ΄κ°κ² λλ€.
β ꡬν ν΄λμ€λ§λ€ ν μ΄λΈμ λ§λλ μ λ΅
λ¨μνκ² κ°μ λ£κ³ , λΊλλ μ’μ보μ΄μ§λ§ λΆλͺ¨ νμ μΌλ‘ μ‘°νν λ
union allμ ν΅ν΄ λͺ¨λ ν μ΄λΈ(album,movie,book)μ μ λΆ μ‘°ννκ²λλ€ κ·Έλ κΈ°λλ¬Έμ κ΅μ₯ν λΉν¨μ¨μ μΌλ‘ λμνκ²λλ€.
β μ₯μ κ³Ό λ¨μ
π μ‘°μΈμ λ΅
- μ₯μ
ν μ΄λΈμ΄ μ κ·νλμ΄ μκ³ μ μ½μ‘°κ±΄μ μνΌνμ (λΆλͺ¨κ°μ²΄)μ κ±Έμ΄ λ§μΆ μ μλ€.
μ κ·ν λμ΄μ Έ μκΈ° λλ¬Έμ μ μ₯곡κ°μ ν¨μ¨μ μΌλ‘ μ¬μ©ν μ μλ€. - λ¨μ
μ‘°νμ μ‘°μΈμ λ§μ΄ μ¬μ©, μ±λ₯ μ ν
μ‘°ν μΏΌλ¦¬κ° λ³΅μ‘νκ³ λ°μ΄ν° μ μ₯μ insert sql 2λ² νΈμΆλλ€.
( μ μ₯ 곡κ°μ΄ ν¨μ¨ν λμ΄μ μκΈ° λλ¬Έμ μ΄λ ν μΈ‘λ©΄μμλ μ±λ₯μ΄ λ μ’μ μ μκ³ , μ‘°μΈμ λ΅μ΄ κ°μ²΄μ μ λ§κΈ°λλ¬Έμ μ‘°μΈμ λ΅μ κΈ°λ³ΈμΌλ‘ μ¬μ©νλκ²μ΄ μ’λ€. )
π λ¨μΌ ν μ΄λΈ μ λ΅
- μ₯μ
μ‘°μΈμ΄ νμ μμΌλ―λ‘ μΌλ°μ μΌλ‘ μ‘°ν μ±λ₯μ΄ λΉ λ₯΄κ³ , μ‘°ν μΏΌλ¦¬κ° λ¨μνλ€. - λ¨μ
μμ μν°ν°κ° 맀νν 컬λΌμ λͺ¨λ null νμ©ν΄μΌνλ€.
λ¨μΌν μ΄λΈμ λͺ¨λ κ²μ μ μ₯νλ―λ‘ ν μ΄λΈμ΄ μ»€μ§ μ μκ³ , μν©μ λ°λΌ μ‘°ν μ±λ₯μ΄ μ€νλ € λλ €μ§ μ μλ€.
π ꡬν ν΄λμ€λ§λ€ ν μ΄λΈ μ λ΅
μ΄ μ λ΅μ μ°μ§ μλκ±Έ μΆμ²νλ€.
μλΈ νμ
μ λͺ
ννκ² κ΅¬λΆν΄μ μ²λ¦¬ν λ ν¨κ³Όμ μ΄κ³ κ°κ° not nullμ μ½μ‘°κ±΄μ μ¬μ©ν μ μμ§λ§,
μ¬λ¬ μμ ν
μ΄λΈμ ν¨κ» μ‘°νν λ μ±λ₯μ΄ λλ¦¬κ³ (union sql), μμ ν
μ΄λΈμ ν΅ν©νλ μΏΌλ¦¬κ° μ΄λ ΅λ€.
π MappedSuperclass
μμ κ΄κ³ 맀νμ΄ μλλ©° μν°ν°, ν
μ΄λΈκ³Ό 맀νλμ§ μκ³ λΆλͺ¨ ν΄λμ€λ₯Ό μμ λ°λ μμ ν΄λμ€μ 맀ν μ λ³΄λ§ μ 곡 νκ³ μ‘°ν, κ²μμ΄ λΆκ°λ₯νλ€.
( μ§μ μμ±νμ¬ μ¬μ©ν μΌμ΄ μμΌλ―λ‘ μΆμ ν΄λμ€λ‘ λ§λλκ±Έ κΆμ₯νλ€. )
ν
μ΄λΈκ³Ό κ΄κ³ μκ³ , λ¨μν μν°ν°κ° 곡ν΅μΌλ‘ μ¬μ©νλ 맀ν μ 보λ₯Ό λͺ¨μΌλ μν μ νλ€.
μ£Όλ‘ λ±λ‘μΌ, μμ μΌ, λ±λ‘μ, μμ μ κ°μ μ 체 μν°ν°μμ 곡ν΅μΌλ‘ μ μ©νλ μ 보λ₯Ό λͺ¨μ λ μ¬μ©νλ€.
π μ°Έκ³ λ° μλ£ μΆμ² : μλ° ORMνμ€ JPAνλ‘κ·Έλλ° - κΈ°λ³ΈνΈ (κΉμν)