JPA는 부모 엔티티와 연관관계가 끊어진 자식 엔티티를 자동으로 삭제하는 기능을 제공하는데 이것을 고아 객체(ORPHAN)제거라 한다. 이기능을 사용해서 부모 엔티티의 컬렉션에서 자식 엔티티의 참조만 제거하면 자식 엔티티가 자동으로 삭제된다.
@Entity
public class Parent{
@Id @GeneratedValue
private Long id;
@OneToMany(mappedBy = "parent", orphanRemoval = true)
private List<Child> children = new ArrayList<>();
}
고아 객체 제거 기능은 컨텍스트 플러시 할때 적용되므로 플러시 시점에 DELETE SQL이 실행된다. 또한, 참조가 제거된 엔티티는 다른곳에서 참조하지 않는 고아객체로 보고 삭제하는 기능이다. 따라서 이 기능은 참조하는 곳이 하나일 때만 사용해야 한다. 특정 엔티티가 개인 소유하는 엔티티에서만 이 기능을 적용해야 한다. 이런 이유로 orphanRemoval은 @OneToOne, @OneToMany에만 사용할 수 있다.
+ 만약 부모객체를 제거하면 자식객체도 제거된다 = CascadeType.REMOVE
'JPA' 카테고리의 다른 글
7.1 상속관계 매핑 (0) | 2021.01.17 |
---|---|
8.6 영속성 전이 + 고아객체, 생명주기 (0) | 2021.01.17 |
8.4 영속성 전이: CASCADE (0) | 2021.01.16 |
8.3.1 프록시와 컬렉션 래퍼 (0) | 2021.01.16 |
8.2 즉시로딩과 지연로딩 (0) | 2021.01.16 |