
JPA μν°ν°μμ `@OneToMany` 컬λ μ μ μ λ°μ΄νΈν λ,
리μ€νΈλ₯Ό ν΅μ§Έλ‘ κ΅μ²΄νλ©΄ μ λλ μ΄μ μ λν΄μ μ λ¦¬ν΄ λ³΄λ €κ³ νλ€.
π§ μμ μ μ½λ - 컬λ μ μ μ 리μ€νΈλ‘ ν λΉ
//Diary.kt
if (diaryActivityCategoryList.isNotEmpty()) {
this.diaryActivityCategory?.clear()
this.diaryActivityCategory = diaryActivityCategoryList
}
ν μ€νΈ κ³Όμ μμ λ³κ²½ κ°μ§(dirt checking)μ΄ μ λλ‘ λμνμ§ μμ μμΈμ μ°Ύμ보μλ€.
π JPAμ 컬λ μ μΆμ
JPAλ `@OneToMany`λ‘ λ§€νλ 컬λ μ μ λ‘λ©ν λ, λ¨μν `ArrayList`κ° μλ Hibernate μ μ© λνΌ μ»¬λ μ (`PersistentBag`, `PersistentList` λ±)μΌλ‘ κ°μΈμ κ΄λ¦¬νλ€.
@OneToMany(mappedBy = "diary", orphanRemoval = true, cascade = [CascadeType.ALL])
var diaryActivityCategories: MutableList<DiaryActivityCategory> = mutableListOf()
protected set

μν°ν°λ₯Ό μ‘°ννλ©΄ `diaryActivityCategories`μλ μ€μ λ‘ `PersistentBag` νμ μ΄ λ€μ΄κ° μλ€.
μ΄ `PersistentBag`μ΄ λ΄λΆμ μΌλ‘ μλ³Έ μ€λ μ·κ³Ό νμ¬ μνλ₯Ό λΉκ΅ν΄μ μ΄λ€ μμκ° μΆκ°/μμ λμλμ§ μΆμ νλ€.
PersistentBag π
JPAκ° κ΄λ¦¬νλ 컬λ μ GPS μΆμ κΈ°κ° λ¬λ¦° κ°λ°©μ΄λΌκ³ μκ°νλ©΄ μ΄ν΄νκΈ° μ½λ€.
μλ₯Όλ€μ΄,
// λ°©λ² 1
this.diaryActivityCategory?.clear()
this.diaryActivityCategory?.addAll(diaryActivityCategoryList)
// λ°©λ² 2
this.diaryActivityCategory = diaryActivityCategoryList
λ°©λ² 1μ JPAκ° μΆμ νλ κ°λ°©μ κ·Έλλ‘ λκ³ λ΄μ©λ¬Όλ§ λ°κΏμ£ΌκΈ° λλ¬Έμ, JPA μ μ₯μμ μ΄λ€ μμκ° μΆκ°/μμ λμλμ§ μΆμ μ΄ κ°λ₯νλ€.
λ°©λ² 2λ JPAκ° μΆμ νλ κ°λ°©μ λ²λ¦¬κ³ μ κ°λ°©μΌλ‘ κ΅μ²΄νκΈ° λλ¬Έμ, JPA μ μ₯μμ λμ΄μ μΆμ μ΄ λΆκ°λ₯νλ€.
π·π» μμ ν μ½λ — κ°μ 컬λ μ μ μ§, λ΄μ©λ§ κ΅μ²΄
if (diaryActivityCategoryList.isNotEmpty()) {
this.diaryActivityCategory.clear()
this.diaryActivityCategory.addAll(diaryActivityCategoryList)
}
JPAκ° μ²μλΆν° κ΄λ¦¬νλ 컬λ μ κ°μ²΄λ κ·Έλλ‘ λκ³ , μμ μμλ§ λΉμ°κ³ (`clear()`), λ€μ μμ² κ°μ μΆκ°(`addAll()`)νλ€.
μ°Έκ³ :
[JPA] πΌ PersistentBag
πΌ PersistentBagPersistentBagμ Hibernateμμ μ 곡νλ 컬λ μ νμ μ€ νλλ‘, @OneToMany λλ @ManyToMany κ΄κ³μμ μ¬μ©λλ List νμ μ 컬λ μ μ κ΄λ¦¬νκΈ° μν ꡬν체μ΄λ€. μ΄ μ»¬λ μ μ μ§μ° λ‘λ©(lazy lo
madeprogame.tistory.com
JPAμμ 컬λ μ κ³Ό μ¬λ¬ κΈ°λ₯ νμ©νκΈ°
μ΄μ κΈ: https://gojs.tistory.com/57 μμμ± κ΄λ¦¬ μ λ΅νΈλμμ λ²μμ μμμ± μ»¨ν μ€νΈμ€νλ§ μ»¨ν μ΄λλ κΈ°λ³Έμ μΌλ‘ νΈλμμ λ²μμ μμμ± μ»¨ν μ€νΈ μ λ΅μ κ°μ§λ€. νΈλμμ μ΄ μμλλ©΄ μμμ±
gojs.tistory.com
'Today I Learned π§ > Project' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| [TIL] Kotlin ννμ νμ©νμ¬ λ¦¬ν©ν λ§ νκΈ° (0) | 2026.03.08 |
|---|---|
| [TIL] JPA μν°ν° update λ¬Έμ ν΄κ²° (JPA λν°μ²΄νΉκ³Ό @Transactional) (3) | 2026.01.18 |