Jin's Dev Story

[Spring Data JPA] 영속성 전이, 고아객체 본문

Web & Android/Spring Data JPA

[Spring Data JPA] 영속성 전이, 고아객체

woojin._. 2023. 10. 15. 09:43

영속성 전이

  • 엔티티의 상태를 변경할 때 해당 엔티티와 연관된 엔티티의 상태 변화를 전파시키는 옵션
  • ex) 학생이라는 엔티티가 있는데 학생이 졸업을 해서 연관된 엔티티들을 지워야함
    • 하나도 남김 없이 연관된 엔티티를 지워야만 메인(학생)엔티티를 지울 수 있음
    • 이걸 설정하는게 영속성 전이
  • cascade 옵션

@OneToMany(mappedBy = "order", cascade = CascadeType.ALL)  // 양방향 매핑을 하기 위해 설정
    private List<OrderItem> orderItems = new ArrayList<>();

1. 주문 영속성 전이

  • 부모인 Order Entity가 저장될 때, 자식인 OrderItem 또한 저장되는 영속성 전이

  • OrderRepository 생성
import kr.spring.order.entity.Order;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

public interface OrderRepository extends JpaRepository<Order, Long> {

}
  • 부모 Order Entity CASCADE 지정
// 양방향 매핑을 하기 위해 설정, 영속성 전이 설정, 고아객체 설정(고아객체가 되면 다 날려버리겠다는 것)
    @OneToMany(mappedBy = "order", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
    private List<OrderItem> orderItems = new ArrayList<>();

고아 객체

  • 부모 엔티티와 연관 관계가 끊어진 자식 엔티티
  • 영속성 전이 기능과 같이 사용하면 부모 엔티티를 통해서 자식의 생명 주기를 관리할 수 있음
  • 고아객체 제거 기능은 참조하는 곳이 하나일 때만 사용
  • OrderItem엔티티를 Order 엔티티가 아닌 다른 곳에서 사용하고 있다면 이 기능을 사용하면 안됨
  • @OneToOne, @OneToMany 어노테이션에서 “orphanRemoval = true” 옵션 사용

 

  • 부모 Entity에 orphanRemoval = true 설정
// 양방향 매핑을 하기 위해 설정, 영속성 전이 설정, 고아객체 설정(고아객체가 되면 다 날려버리겠다는 것)
    @OneToMany(mappedBy = "order", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<OrderItem> orderItems = new ArrayList<>();

영속성 전이 vs 고아객체 제거

  • 영속성 전이 - 부모 엔티티가 삭제될 때 같이 삭제되는 것
  • 고아객체 제거 - 부모 엔티티와의 연관관계가 끊어질 때 삭제되는 것

'Web & Android > Spring Data JPA' 카테고리의 다른 글

[Spring Data JPA] 즉시로딩, 지연로딩  (0) 2023.10.15
[Spring Data JPA] 연관 관계 매핑  (0) 2023.10.15
[Spring Data JPA] Querydsl  (0) 2023.10.15
[Spring Data JPA] @Query  (0) 2023.10.14
[Spring Data JPA] JPA  (0) 2023.10.14