CascadeType.DELETE, orphanRemoval ์ฐจ์ด์
๋ชฉํ
CASCADE.REMOVE
์ orphanRemoval
์ ์ฐจ์ด์ ์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค.
ํ ์คํธ์ฉ ์ํฐํฐ
public class Parent {
@OneToMany(mappedBy = "parent")
private List<Child> children = new ArrayList<>();
}
public class Child {
@ManyToOne
@JoinColumn(name = "PARENT_ID")
private Parent parent;
}
CASCADE.REMOVE
@OneToMany(mappedBy = "parent", cascade = CascadeType.REMOVE)
private List<Child> children = new ArrayList<>();
- ์ํฉ 1. children.remove(child)
- ์ด๋, child๋
DETACH ์ํ
๊ฐ ๋๋ค. ์ฆ, ๊ณ ์๊ฐ ๋๋ค. (๋ถ๋ชจ๊ฐ ์์ด ์ฌ์ ํDB์ ๋จ์์๋ค
.)
- ์ด๋, child๋
- ์ํฉ 2. parentRepository.delete(parent)
- ์ด๋, parent์ ์ํ ๋ชจ๋ child๋ ํจ๊ป ์ญ์ ๋๋ค.
orphanRemoval = true
@OneToMany(mappedBy = "parent", orphanRemoval = true)
private List<Child> children = new ArrayList<>();
- ์ํฉ 1. children.remove(child)
- ์ด๋ ๋ฆฌ์คํธ์์ ์ ๊ฑฐ๋ child๋ฅผ
๊ณ ์๋ผ๊ณ ์ธ์ํ๊ณ DB์์ ์ ๊ฑฐ
ํ๋ค.
- ์ด๋ ๋ฆฌ์คํธ์์ ์ ๊ฑฐ๋ child๋ฅผ
- ์ํฉ 2. parentRepository.delete(parent)
- ์ด๋, parent์ ์ํ ๋ชจ๋ child๋ ํจ๊ป ์ญ์ ๋๋ค.
์ฐจ์ด์
- ๊ณตํต
- ๋ถ๋ชจ๋ฅผ ์ญ์ ํ๋ฉด ์์๋ ํจ๊ป ์ญ์
- CASCADE.REMOVE
- ์์์ ๋ฆฌ์คํธ์์ ์ ๊ฑฐํ๋ฉด DB์์ ์ ๊ฑฐ ์์ํด.
- orphanRemoval
- ์์์ ๋ฆฌ์คํธ์์ ์ ๊ฑฐํ๋ฉด DB์์๋ ์ ๊ฑฐํจ.