π λ°°κ²½
νλ‘μ νΈ κ°λ° μ€ νΉμ μν°ν°μ 10κ°κ° λλ νλλ₯Ό μ λ°μ΄νΈλ₯Ό ν΄λ¬λΌλ λΉμ¦λμ€ μꡬμ¬νμ΄ μμλ€.
κ·Έλμ 10κ°κ° λλ νλλ₯Ό κ°κ° μ λ°μ΄νΈνλ λ©μλλ₯Ό μμ±νλλ°.. 보기μ λ³λ‘ μ’μ 보μ΄μ§ μμλ€.
νμλ JPAμ save() λ©μλκ° ν΅ν΄ μ μ₯κ³Ό λ³κ²½μ λν κΈ°λ₯μ ν λ²μ μ 곡νκ³ μλ€λ κ±Έ μκ³ μμλ€. κ·Έλμ λΉλ ν¨ν΄μΌλ‘ κΈ°μ‘΄ ID, κ°, λ³κ²½λ κ°μ μΆκ°ν μλ‘μ΄ μν°ν°λ₯Ό λ§λ€μ΄μ save()λ₯Ό ν΅ν΄ μ λ°μ΄νΈνλ κ² λ³΄κΈ°μλ μ’κ³ ν¨μ¨μ μΌλ‘ 보μλ€. μκ°λλ‘ μ½λλ₯Ό μμ±νκ³ ν μ€νΈ ν λ€ λλ¦ κ²°κ³Όμ λ§μ‘±νλ€.
κ·Έλ¬λ μ΄λ λ μ΄μ νμμ μ°λ½μ΄ μ¨λ€.
"μ λ°μ΄νΈλ₯Ό νλλ μ°κ²°λ λ°μ΄ν°κ° λ€ μ¬λΌμ‘λλ°μ?"
"????"
μ΄μ μ€μ ν΄λΌμ΄μΈνΈκ° μ λ°μ΄νΈλ₯Ό νλλ°, λ°μ΄ν°κ° λ€ μ¬λΌμ‘λ€κ³ νλ€. λ¬΄μ¨ μΌμΈκ° μΆμ΄μ μλλ¬ μ½λλ₯Ό νμΈνλ€.
μμΈ
μ λ°μ΄νΈ μ½λ μμ± μ΄ν λμ€μ μΆκ°λ μ°κ΄κ΄κ³μ orphanRemoval=trueκ° λμ΄μλ κ² λ¬Έμ μλ€.
λ€λ₯Έ κ°λ°μκ° ν΄λΉ μν°ν°μλ orphanRemoval μ΅μ κ³Ό ν¨κ» μ°κ΄ κ΄κ³λ₯Ό μΆκ°νλλ°, λ§μ κΈ°μ‘΄ μ λ°μ΄νΈ λ‘μ§μ μμ νμ§ μμλ€. κ·Έλμ μ΄νμ μ λ°μ΄νΈ APIλ₯Ό νΈμΆνμ λ ν΄λΉ μ°κ΄ κ΄κ³ νλμλ null κ°μ΄ λ€μ΄κ°κ² λκ³ , κ²°κ΅ orphanRemoval μ΅μ μ μν΄ μμ κ° λμ΄λ²λ¦° κ²μ΄λ€.
ν΄κ²°
λ¬Έμ λ₯Ό ν΄κ²°νλ λ°©λ²μ μ λ°μ΄νΈ λΉλμ ν΄λΉ μ°κ΄κ΄κ³λ₯Ό μΆκ°ν΄μ μμ νκ±°λ update λ©μλλ₯Ό λ€μ μ΄μ¬ν λ§λλ λ°©μ 2κ°μ§μλ€.
νμλ νμλ₯Ό μ ννλ€. κ°μ λ¬Έμ κ° λ°μνμ§ μμΌλ¦¬λΌλ 보μ₯μ΄ μμκΈ° λλ¬Έμ΄λ€.
λ§λ¬΄λ¦¬
λ€νν DBλ λ°±μ μ΄ λκ³ μμκΈ° λλ¬Έμ λλΆλΆμ λ°μ΄ν°λ₯Ό 볡ꡬνλ λ° μ±κ³΅νλ€.
μ¬λΌμ‘λ λ°μ΄ν°κ° κ·Έλ κ² μ€μν λ°μ΄ν°κ° μλμκ³ , λ³΅κ΅¬κ° κ°λ₯νκΈ° λλ¬Έμ λ€νμ΄μλ€.
λλΆμ DB λ°±μ μ μ€μμ±μ λν΄ λ€μ νλ² μκ°νκ² λμκ³ , μ΄ν λμΌν μꡬμ¬νμ΄ μμ λ λ μ΄μ save()λ₯Ό μ΄μ©ν μ λ°μ΄νΈ λ‘μ§μ μμ±νμ§ μκ³ Dirty Checkingμ νμ©ν update λ©μλλ₯Ό μμ±ν΄μ λ‘μ§μ μμ±νκ² λμλ€.
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/012.gif)
[ ν¬μ€ν κ΄λ ¨ μλ©΄ μ’μ μ§μ ]
1. orphanRemoval νΉμ§
orphanRemoval μ΅μ μ trueλ‘ νλ©΄ κΈ°μ‘΄ NULLμ²λ¦¬λ μμμ μμ μ²λ¦¬νλ€.
PK(JoinColumn) κ°μ΄ NULLλ‘ λ³ν μμμ κ³ μκ°μ²΄. μ¦, μ°κ²°λ μ μ΄ μλ κ°μ²΄μ΄λ€.
orphanRemoval μ΅μ μ μ΄λ¬ν κ³ μκ°μ²΄λ₯Ό μμ νλ μν μ νλ€.
2. JPA update
JPAλ saveλ©μλλ₯Ό ν΅ν΄ μ μ₯κ³Ό λ³κ²½μ λν κΈ°λ₯μ ν λ²μ μ 곡νλ€.
JPAλ Dirty Checkingμ ν΅ν΄ μμνλ μν°ν°λ€μ λ³κ²½μ μλμΌλ‘ κ°μ§ν΄μ μμ 쿼리λ₯Ό DBμ μ λ¬νλ€.
μμνλ μν°ν°λ saveλ©μλλ₯Ό μ¬μ©νμ§ μμλ JPAμ μν΄ λ³κ²½ μ¬νμ΄ μλμΌλ‘ DBμ μ μ©λλ€.
+ Reference
https://tecoble.techcourse.co.kr/post/2021-08-15-jpa-cascadetype-remove-vs-orphanremoval-true/
JPA CascadeType.REMOVE vs orphanRemoval = true
JPAλ₯Ό 곡λΆνλ€ λ³΄λ©΄ λ°λ‘ μ΄ν΄νκΈ° μ½μ§ μμ κ°λ λ€μ λͺ κ° λ§μ£ΌμΉλ€. νμλ μ°κ΄κ΄κ³ 맀ν, μμμ± μ μ΄, κ³ μ κ°μ²΄ λ±μ΄ νΉν μ΄λ €μ λ€. μ΄λ μ κ° μ λ ν·κ°λ Έλλ°, μ§μ νμ΅ ν μ€νΈλ₯Ό μ
tecoble.techcourse.co.kr
'Spring > JPA' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[JPA] PKκ° μλ νλμ Auto Increment μ¬μ©νκΈ° (0) | 2023.12.09 |
---|---|
Querydsl Paging & Count Query μ΅μ ν (0) | 2023.11.11 |
@Transactional νΉμ§, μ¬μ©λ°©λ², μ£Όμμ (0) | 2023.08.15 |
Spring Boot 3.0 QueryDsl Maven μ€μ νκΈ° (0) | 2023.04.09 |
JPA λμΌ νΈλμμ μμ updateμ insert λμμ μνν λ λ¬Έμ ν΄κ²°νκΈ° (쿼리 μ€ν μμ λ¬Έμ ) (0) | 2023.02.05 |
λκΈ