JPA
고아 객체(feat. orphanRemoval)
쿠카이든
2022. 6. 12. 00:32
728x90
- JPA는 부모 엔티티와 연관관계가 끊어진 자식 엔티티를 자동으로 삭제하는 기능을 제공하는데 이것을 고아 객체(ORPHAN) 제거라 한다.
- 이 기능을 사용해서 부모 엔티티의 컬렉션에서 자식 엔티티의 참조만 제거하면 자식 엔티티가 자동으로 삭제된다.
@Entity
public class Parent {
@Id @GeneratedValue
private Long id;
@OneToMany(mappedBy = "parent", orphanRemoval = true)
private List<Child> children = new ArrayList<Child>();
...
}
- 위 코드와 같이 orphanRemoval = true로 설정하면, 컬렉션에서 제거한 엔티티는 자동으로 삭제된다.
Parent parent1 = em.find(Parent.class, id);
parent1.getChildren().remove(0); //자식 엔티티를 컬렉션에서 제거
- 실행 결과 SQL은 다음과 같다.
DELETE FROM CHILD WHERE ID=?
- 사용 코드를 보면 컬렉션에서 첫 번째 자식을 제거했다. orphanRemoval = true 옵션으로 인해 컬렉션에서 엔티티를 제거하면 데이터베이스의 데이터도 삭제된다.
- 만약, 모든 자식 엔티티를 제거하려면 다음 코드처럼 컬렉션을 비우면 된다.
parent1.getChildren().clear();
출처 : JPA 프로그래밍 (저자 김영한)
728x90