-
orphanRemoval 이란?Engineering WIKI/Docs 2022. 4. 2. 01:41
부모 엔티티와 연관관계가 끊어진 자식 엔티티를 자동으로 삭제해주는 기능이다.
@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 - orphanRemoval=true vs CascadeType.REMOVE