Overview
μ΄μ μλ JPA/Hibernate λ₯Ό ν΅νμ¬ μμ£Ό κΈ°λ³Έμ μΈ mapping κ΅¬μ‘°λ§ λ€λ£¨μμλ€.
κ·Έλ¬λ Real-World μμμ database μμλ νλμ database, μ¦ νλμ Schema λ΄μ μ¬λ¬ κ°μ table λ€μ΄ μ‘΄μ¬νκ±°, κ° table μ¬μ΄μ νΉλ³ν κ΄κ³κ° μμ μ μλ€.
μ΄μ λν modeling μ JPA κ° μνν μ μλ€.
Advanced Mappings
Advanced Mappings μλ λ€μ μΈ κ°μ§κ° μ‘΄μ¬νλ€.
One-to-One One-to-Many, Many-to-One Many-to-Many
μ°μ κ°λ¨νκ² One-to-One mapping μ μ΄ν΄λ³΄μ.
One-to-One mapping μ κ°λ¨νκ² λ§νλ©΄, first name, last name, email λ±μ κΈ°λ³Έμ μΈ column μ ν¬ν¨ν Instructor λΌλ entity μ λνμ¬ Instructor Detail μ΄λΌλ, μΆκ°μ μΈ μ 보λ₯Ό μ μ₯νλ entity μμ κ΄κ³λ₯Ό μκ°νλ©΄ λλ€.
One-to-Many mapping μ μ΄λ¦μμλ μ μ μλ―μ΄, νλμ entity κ° μ¬λ¬ κ°μ entity μ mapping λλ ꡬ쑰μ΄λ€. μλ₯Ό λ€μ΄, Instructor entity λ μ¬λ¬ κ°μ Course entity λ₯Ό κ°μ§ μ μλ€λ κ²μ΄λ€.
λ§μ§λ§μΌλ‘ Many-to-Many λ νλμ Course κ° μ¬λ¬ κ°μ Student λ₯Ό κ°μ§ μ μμΌλ©°, λ§μ°¬κ°μ§λ‘ Student μμ μ¬λ¬ κ°μ Course λ₯Ό κ°μ§ μ μλ ꡬ쑰λ₯Ό μλ‘ λ€ μ μλ€.
λ μμΈν λ΄μ©μ μμ보기 μ μ, Database μ μμ΄μ μ€μν concepts μΈ Primary key / Foreign Key, Cascase μ λνμ¬ μμ보μ.
Primary Key and Foreign Key
Primary Key λ μ μκ³ μλ―μ΄, table μμ unique ν row λ₯Ό identify νλ μν μ μννλ€.

Foreign Key λ λ€λ₯Έ table μ primary key λ₯Ό μμ μ table μμμ field λ‘μ¨ μ¬μ©νλ μν μ μννλ€. μμ κ°μ΄, instructor_detail table μ΄ instructor table μ μ’
μλμ΄ μλ κ΄κ³μ΄λ―λ‘, instructor_detail μ PK(Primary Key) λ₯Ό instructor μ FK(Foreign Key) λ‘ μ¬μ©νλ κ²μ΄ μΌλ°μ μΈ λ°©λ²μ΄λ€.
Cascade

Cascade λ₯Ό λ²μνλ©΄ βνν¬μ²λΌ νλ₯΄λ€βλΌλ λ»μ κ°κ³ μλλ°, μ΄λ° μλ―Έμ²λΌ related entities λ€μ λνμ¬ κ°μ operation μ΄ μ°μμ μΌλ‘ μνλλ€λ κ²μ μλ―Ένλ€.
μμ μ΄λ―Έμ§μ²λΌ, instructor κ° μ μ₯λλ©΄ instructor_detail λ μ μ₯λκ³ , μ΄λ μμ μ κ²½μ°μμλ λ§μ°¬κ°μ§μ΄λ€. μμ μ κ²½μ°, CASCADE DELETE λ‘ μλ €μ Έ μλ€.
κ·Έλ¬λ CASCADE DELETE μ κ²½μ°, Many-to-Many μ μν©μμλ μ μ νμ§ μλ€. μλ₯Ό λ€μ΄, νλμ student λ₯Ό μμ νλ €κ³ ν λ, νμμ mapping λ course λ μμ ν΄μΌ νλ κ²μ μλλ€.
λ°λΌμ κ°λ°μλ μν©μ λ°λΌμ cascading μ configure ν΄μΌ νλ€.
Fetch Types: Eager vs Lazy Loading
data λ₯Ό fetch / retrieve νλ €κ³ ν λ, λͺ¨λ κ²μ retrieve ν΄μΌ νλ κ²μ λν μλ¬Έμ΄ μμ μ μλ€.
λ§μ½ One-to-Many μ μν©, μλ₯Ό λ€μ΄ νλμ instructor κ° μ¬λ¬ κ°μ course λ₯Ό κ°κ³ μμ λ, instructor λ₯Ό retrieve νλ μν©μμ κ·Έμ μν course data κΉμ§ λͺ¨λ μ¦μ κ°μ ΈμμΌν νμκ° μλλ κ²μ΄λ€.
μ΄μ Eager loading λ°©μμ μ¦μ λͺ¨λ data λ₯Ό κ°μ Έμ€λ κ²μ΄κ³ , Lazy loading μ request κ° μμ λ κ°μ Έμ€λ λ°©μμ΄λ€.
Uni-Directional

Uni-Directional μ λ¨λ°©ν₯μΌλ‘ entity μ κ΄κ³κ° μ ν΄μ Έ μμ΄, μμμ entity μ λ¨Όμ μ κ·Όν΄μΌλ§ νμμ entity μ μ κ·Όν μ μλ μ±κ²©μ κ°κ³ μλ€.
Bi-Directional

Bi-Directional μ μλ°©ν₯μΌλ‘, μμͺ½μ entity μμ λ€λ₯Έ entity μ μ κ·Όν μ μλ reference κ° μλ ꡬ쑰λ₯Ό μλ―Ένλ€.