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
'JPA' 카테고리의 다른 글
연관관계 편의 메소드 작성 시 주의사항(part.2) (0) | 2022.06.12 |
---|---|
연관관계 편의 메소드(part.1) (0) | 2022.06.12 |
영속성 전이에 관해(부제 : CASCADE) (0) | 2022.06.11 |
상속관계 매핑 전략(@DiscriminatorColumn 란?) (0) | 2022.06.05 |
(JPA) Error attempting to apply AttributeConverter 에러 관련 글(feat. @Converter 사용시) (0) | 2022.03.26 |