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 μ²λΌ λμ