Search
β˜•

cascade.remove vs orphan removal

cascade

β†’ λΆ€λͺ¨ μ—”ν„°ν‹°μ˜ 변경이 μžμ‹ μ—”ν„°ν‹°μ—κ²Œ 영ν–₯을 μ€€λ‹€.
ex) team, member μ‹œ team 을 μƒμ„±ν•˜κ±°λ‚˜ team 을 μ‚­μ œν•  λ•Œ member 도 같이 μƒμ„±λ˜κ³  μ‚­μ œλœλ‹€.

orphan removal

β†’ λΆ€λͺ¨ 객체의 μžμ‹ λ³€μˆ˜μ—μ„œ μžμ‹ 객체가 μ‚­μ œ λ˜μ—ˆμ„ λ•Œ μžμ‹ μ—”ν„°ν‹°λ₯Ό μ‚­μ œν•˜λŠ” 것
ex) team, member μ‹œ team 의 members μ—μ„œ member μ›μ†Œ ν•˜λ‚˜κ°€ μ‚­μ œλ˜μ—ˆμ„ λ•Œ ν•΄λ‹Ή μ—”ν„°ν‹°κ°€ μ—°κ΄€μ—μ„œ μ‚­μ œλœλ‹€.
주의점: hibernate5.6 κΈ°μ€€ orphan removal 은 cascade 의 속성에 영ν–₯을 λ°›λŠ”λ‹€. cascade κ°€ persist μ΄κ±°λ‚˜ all μΌλ•Œλ§Œ μœ νš¨ν•˜λ‹€.

μ˜ˆμ‹œ

ν™˜κ²½

β€’
Team, Member λŠ” OneToMany 단방ν–₯

cascade κ°€ remove 일 λ•Œ

entityManager.getTransaction().begin(); Team morak = entityManager.find(Team.class, 1); entityManager.remove(morak); entityManager.getTransaction().commit();
Java
볡사
β†’ team 을 μ‚­μ œν•˜λ©΄ member 도 μ‚­μ œλœλ‹€. λ¬Όλ‘  μ œμ•½μ‘°κ±΄μ— μ˜ν•΄ memberκ°€ λ¨Όμ € μ‚­μ œλœλ‹€.

cascade κ°€ persist 이고 orphan removal 일 λ•Œ

entityManager.getTransaction().begin(); entityManager.persist(morak); morak.removeMember(0); entityManager.getTransaction().commit();
Java
볡사
κ²°κ³Ό
Hibernate: insert into team (id, name) values (default, ?) Hibernate: insert into member (id, name, team_id) values (default, ?, ?) Hibernate: delete from member where id=?
Java
볡사
orphan removal 이 잘 λ™μž‘ν•œλ‹€.

κ²°λ‘ 

β€’
cascade remove λŠ” team 이 μ‚­μ œλ  λ•Œμ˜ 상황
β€’
orphan removal 은 team 의 members μ—μ„œ member κ°€ μ‚­μ œλ  λ•Œμ˜ 상황

λ²ˆμ™Έ

cascade κ°€ persist 이고 orphan removal=false(default) 일 λ•Œ λΆ€λͺ¨ μ—”ν„°ν‹°λ₯Ό μ‚­μ œν•˜λ©΄

JdbcSQLIntegrityConstraintViolationException β†’ μ œμ•½μ‘°κ±΄ μ—λŸ¬

cascade κ°€ persist 이고 orphan removal=true 일 λ•Œ λΆ€λͺ¨ μ—”ν„°ν‹°λ₯Ό μ‚­μ œν•˜λ©΄

entityManager.getTransaction().begin(); entityManager.persist(morak); entityManager.remove(morak); entityManager.getTransaction().commit();
Java
볡사
Hibernate: insert into team (id, name) values (default, ?) Hibernate: insert into member (id, name, team_id) values (default, ?, ?) Hibernate: delete from member where id=? Hibernate: delete from team where id=?
Java
볡사
orphan removal μ˜΅μ…˜μ— μ˜ν•΄ cascade remove 처럼 λ™μž‘