부모 엔티티와 연관관계가 끊어진 자식 엔티티를 자동으로 삭제해주는 기능이다.
@Entity
public class Parent {
@Id
@GeneratedValue
private Long id;
private String username;
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Child> childList = new ArrayList<>();
}
orphanRemoval을 true로 하면 ,
Parent parent1 = em.find(Parent.class, parent.getId());
parent1.getChildList().remove(0); // delete 쿼리나간다.
자동으로 delete 쿼리가 나간다.
이 속성은 참조하는 곳이 하나일 때만 사용해야 한다. 특정 엔티티가 개인 소유할 때만 사용해야한다.
@OneToOne과 @OneToMany에서만 사용이 가능하다.
CascadeType.ALL + orphanRemovel=true
이 두개를 같이 사용하게 되면 부모 엔티티가 자식의 생명주기를 모두 관리할 수 있게 된다.
- orphanRemoval=true vs CascadeType.REMOVE
- Parent가 삭제 되었을 때 Child도 함께 삭제시키는 역할을 수행하는 점에선 동일
- 다른점은,
- 관계를 끊는 것에 대한 응답!
- 만약 Parent의 Child 값을 null을 주었다고 가정
- orphanRemoval=true는 관계가 끊어진 child를 자동으로 제거한다.
- CascadeType.REMOVE는 관계가 끊어진 child를 자동 제거하지 않는다.
- 관계가 끊어졌다는 것을 제거로 보지 않기 때문에
'Engineering WIKI > Docs' 카테고리의 다른 글
Path Parameter 와 Query Parameter 구분 (0) | 2022.09.17 |
---|---|
파이썬 최대공약수와 최소공배수 알고리즘 (0) | 2022.05.26 |
소수 (Prime Number) 판별 (0) | 2022.05.26 |
알고리즘 기본정렬 (0) | 2022.04.07 |
Spring JPA CascadeType 종류 (0) | 2022.04.02 |
동시성 vs 병렬성 (헷갈리는 개념 뿌시기) (0) | 2022.02.28 |
API의 개념 뿌수기! (필수 API 개념 기술) (0) | 2021.01.17 |
객체지향 (LID) (0) | 2021.01.17 |