πŸ”™λ’€λ‘œκ°€κΈ°

κ³ μ•„ 객체(Orphaned Object)

κ³ μ•„ 객체 처리(Orphan removal) κΈ°λŠ₯

μž‘λ™ 방식

  1. λΆ€λͺ¨ 엔티티와 μžμ‹ μ—”ν‹°ν‹°κ°€ μ—°κ΄€λ˜μ–΄ μžˆμ„ λ•Œ, λΆ€λͺ¨ μ—”ν‹°ν‹°μ˜ μ°Έμ‘°μ—μ„œ μžμ‹ μ—”ν‹°ν‹°λ₯Ό 제거
  2. κ³ μ•„ 객체 처리 κΈ°λŠ₯이 ν™œμ„±ν™”λœ 경우, μžμ‹ μ—”ν‹°ν‹°λŠ” κ³ μ•„ 객체둜 μ·¨κΈ‰
  3. κ³ μ•„ κ°μ²΄λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μžλ™μœΌλ‘œ μ‚­μ œλ¨.
@Entity
public class Parent {
    // ...
    
    @OneToMany(mappedBy = "parent", orphanRemoval = true)
    private List<Child> children;
    
    // ...
}

μœ„ μ˜ˆμ œμ—μ„œ Parent μ—”ν‹°ν‹°λŠ” μ—¬λŸ¬ 개의 child 엔티티와 관계가 μžˆλ‹€. orphanRemoval=true μ˜΅μ…˜μœΌλ‘œ 인해 Parent μ—”ν‹°ν‹°μ˜ children μ»¬λ ‰μ…˜μ—μ„œ Child μ—”ν‹°ν‹°λ₯Ό μ œκ±°ν•˜λ©΄ ν•΄λ‹Ή Child μ—”ν‹°ν‹°κ°€ κ³ μ•„ 객체둜 μ·¨κΈ‰λ˜λ©° μžλ™μœΌλ‘œ μ‚­μ œλœλ‹€.

Parent parent1 = em.find(Parent.class, id); 
parent1.getChildren().remove(0);
//μžμ‹ μ—”ν‹°ν‹°λ₯Ό μ»¬λ ‰μ…˜μ—μ„œ 제거

μ˜μ†μ„± 전이와 κ³ μ•„ 객체 μ²˜λ¦¬μ— λŒ€ν•œ μ£Όμ˜μ‚¬ν•­