JPAλ λΆλͺ¨ μν°ν°μ μ°κ΄κ΄κ³κ° λμ΄μ§ μμ μν°ν°λ₯Ό μλμΌλ‘ μμ νλ κΈ°λ₯μ μ 곡νλ€.(κ³ μ κ°μ²΄(ORPHAN))
λΆλͺ¨ μν°ν°μ 컬λ μ μμ μμ μν°ν°μ μ°Έμ‘°λ§ μ κ±°νλ©΄ μμ μν°ν°κ° μλμΌλ‘ μμ λλ€.
@Entitypublic class Parent{ ... @OneToMany(mappedBy = "parent", orphanRemoval = true) private List<Child> children = new ArrayList<>(); ...}
컬λ μ
μ orphanRemoval = true μ΅μ
μ ν΅ν΄ κ³ μ κ°μ²΄ μ κ±° κΈ°λ₯μ νμ±ν μν¬ μ μλ€.
Parent parent = em.find(Parent.class, id);parent.getChildren().remove(0); // μμ μν°ν°λ₯Ό 컬λ μ
μμ μ κ±°//μ€νκ²°κ³Ό SQL//DELETE FROM CHILD WHERE ID = ?
λΆλͺ¨ μν°ν°μ 컬λ μ μμ μμμ μ°Έμ‘°λ₯Ό λμ΄λ²λ¦¬λ©΄ μλμΌλ‘ DBμμλ μμμ΄ μμ κ° λλ€.
κ³ μ κ°μ²΄ μ κ±° κΈ°λ₯μ μμμ± μ»¨ν
μ€νΈλ₯Ό νλ¬μν λ μ μ©λλ―λ‘ νλ¬μ μμ μ DELETE SQLμ΄ μ€νλλ€.
λͺ¨λ μμ μ κ±° : parent.getChildren().clear()λ‘ μ»¬λ μ
μ λΉμ΄λ€.
κ³ μ κ°μ²΄ μ κ±°λ μ°Έμ‘°κ° μ κ±°λ μν°ν°λ λ€λ₯Έ κ³³μμ μ°Έμ‘°νμ§ μλ κ³ μ κ°μ²΄λ‘ λ³΄κ³ μμ νλ κΈ°λ₯μ΄λ€.
λ°λΌμ μ΄ κΈ°λ₯μ μ°Έμ‘°νλ κ³³μ΄ νλμΌ λλ§ μ¬μ©ν΄μΌ νλ€.
λ§μ½ μμ ν μν°ν°λ₯Ό λ€λ₯Έ κ³³μμλ μ°Έμ‘°νλ€λ©΄ λ¬Έμ κ° λ°μν μ μλ€.
μ΄λ¬ν μ΄μ λ‘ orphanRemovalμ @OneToMany, @OneToOne μλ§ μ¬μ©ν μ μλ€.
κ°λ μ μΌλ‘ λ³Ό λ λΆλͺ¨λ₯Ό μ κ±°νλ©΄ μμμ κ³ μκ° λλ€.
λ°λΌμ λΆλͺ¨λ₯Ό μ κ±°νλ©΄ μμλ κ°μ΄ μ κ±°λλ€.(=CascadeType.REMOVE)