본문 바로가기

JPA

8.5 고아객체

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