영속성 전이
- 엔티티의 상태를 변경할 때 해당 엔티티와 연관된 엔티티의 상태 변화를 전파시키는 옵션
- 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 |