JPA(Java Persistence API)에서 orphanRemoval은 엔티티 간의 부모-자식 관계에서 자식 엔티티가 부모 엔티티와 연결이 끊어질 때, 해당 자식 엔티티를 데이터베이스에서 자동으로 삭제하는 기능을 말합니다.
예를 들어, Parent 엔티티와 Child 엔티티가 있을 때, Parent 엔티티의 Child 엔티티 목록에서 특정 Child 엔티티를 제거하면, orphanRemoval=true로 설정된 경우, 해당 Child 엔티티는 데이터베이스에서 자동으로 삭제됩니다. 이를 통해 데이터 무결성을 보장할 수 있습니다.
orphanRemoval은 다음과 같은 상황에서 유용합니다:
부모-자식 관계에서 자식 엔티티가 부모 엔티티 없이 독립적으로 존재할 수 없는 경우
부모 엔티티에서 자식 엔티티를 제거할 때, 데이터베이스에서도 해당 자식 엔티티를 삭제해야 하는 경우
예를 들어, @OneToMany 또는 @OneToOne 어노테이션을 사용하여 부모 엔티티와 자식 엔티티를 연결할 때 orphanRemoval 속성을 설정할 수 있습니다.
위의 예제에서, Parent 엔티티에서 Child 엔티티를 제거하면, orphanRemoval=true로 설정되어 있기 때문에 해당 Child 엔티티는 데이터베이스에서 자동으로 삭제됩니다. 이렇게 함으로써 데이터베이스의 일관성을 유지할 수 있습니다.
orphanRemoval은 부모 엔티티와 자식 엔티티 간의 관계가 끊어지면, 관계가 끊어진 자식 엔티티를 자동으로 삭제하는 기능입니다. 다음과 같은 경우에 orphanRemoval을 반드시 사용해야 할 필요가 있습니다.
부모 엔티티와 자식 엔티티가 밀접하게 연결되어 있고, 부모 엔티티가 없으면 자식 엔티티가 존재할 이유가 없는 경우입니다. 예를 들어, 게시글(Post)과 댓글(Comment)의 관계에서 게시글이 삭제되면 댓글도 함께 삭제되어야 합니다. 이 경우 orphanRemoval = true로 설정하여 부모 엔티티 삭제 시 자식 엔티티도 함께 삭제되도록 할 수 있습니다.
자식 엔티티가 다른 부모 엔티티에 속할 수 없는 경우입니다. 예를 들어, 주문(Order)와 주문 항목(OrderItem)의 관계에서 주문 항목은 반드시 한 주문에만 속해야 합니다. 이 경우 주문에서 주문 항목을 제거하면, 해당 주문 항목은 더 이상 필요하지 않습니다. 따라서 orphanRemoval = true로 설정하여 관계가 끊어지면 자동으로 삭제되도록 할 수 있습니다.
이처럼 orphanRemoval은 도메인 모델의 특성에 따라 사용 여부를 결정해야 합니다. 꼭 필요한 상황에서만 사용하여 불필요한 삭제 작업을 방지하고, 애플리케이션의 성능과 유지 관리성을 높일 수 있습니다.
'Spring' 카테고리의 다른 글
CascadeType.MERGE (0) | 2023.04.26 |
---|---|
CascadeType.PERSIST (0) | 2023.04.26 |
seatRepository.deleteByCafeCafeId(cafeId) 과 seatRepository.deleteByCafeId(cafeId)의 차이 (0) | 2023.04.26 |
삭제기능시 단방향조인과 양방향조인 (0) | 2023.04.26 |
리뷰 등록 때 마다 별점 평균 계산하여을 엔티티의 칼럼에 넣어줘야할까? 아님 조회 때 마다 계산해서 조회해야할까? (0) | 2023.04.24 |