쌓고 쌓다
[JPA] 고아 객체 제거 + orphanRemoval 동작하지 않을때 본문
부모 엔티티와 연관관계가 끊어진 자식 엔티티를 자동으로 삭제할 수 있다.
부모 엔티티의 컬렉션에서 자식 엔티티의 참조만 제거하면 된다.
Parent
@Entity
@Getter
@Setter
public class Parent {
...
@OneToMany(mappedBy = "parent", cascade = CascadeType.PERSIST, orphanRemoval = true)
private List<Child> child = new ArrayList<>();
}
아래의 코드를 수행하자.
Parent parent = em.find(Parent.class, 12L);
parent.getChild().remove(0);
자식 엔티티 삭제 쿼리가 날라간다.
고아 객체 제거는 참조가 제거된 엔티티가 어떤곳에서도 참조하지 않는 고아 객체라면 삭제하는 기능이다.
참조하는곳이 여러곳이라면 문제가된다. 그래서 참조하는 곳이 하나일때만 사용해야한다.
@OneToOne, @OneToMany에서만 사용이 가능하다.
+ orphanRemoval이 동작하지 않을때
@OneToMany(mappedBy = "parent", orphanRemoval = true)
private List<Child> child = new ArrayList<>();
cascade 옵션의 persist 없이 사용한다면 orphanRemoval이 적용되지 않는다.
앞서 작성한 예제처럼 cascade = CascadeType.PERSIST 옵션을 추가해주자.
버그 참고: 참고 블로그
'프로그래밍 > JPA' 카테고리의 다른 글
JPA에서 save시 SELECT 쿼리 실행 (1) | 2023.09.11 |
---|---|
양방향 연관관계 매핑 JSON 순환참조 문제 (0) | 2023.08.19 |
[JPA] 영속성 전이(CASCADE): 삭제 (0) | 2023.08.18 |
[JPA] 영속성 전이(CASCADE): 저장 (0) | 2023.08.17 |
[JPA] 프록시와 즉시로딩, 지연로딩 (0) | 2023.08.16 |
Comments