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

2023. 10. 15. 09:43·Web & Android/Spring Data JPA

영속성 전이

  • 엔티티의 상태를 변경할 때 해당 엔티티와 연관된 엔티티의 상태 변화를 전파시키는 옵션
  • 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  (1) 2023.10.15
[Spring Data JPA] @Query  (0) 2023.10.14
[Spring Data JPA] JPA  (0) 2023.10.14
'Web & Android/Spring Data JPA' 카테고리의 다른 글
  • [Spring Data JPA] 즉시로딩, 지연로딩
  • [Spring Data JPA] 연관 관계 매핑
  • [Spring Data JPA] Querydsl
  • [Spring Data JPA] @Query
woojin._.
woojin._.
여러가지 개발을 해보며 발생하는 이야기들에 대한 블로그입니다:)
  • woojin._.
    Jin's Dev Story
    woojin._.
  • 전체
    오늘
    어제
    • 분류 전체보기 (829)
      • Tools (25)
        • eGovFrame (3)
        • GeoServer (3)
        • QGIS (2)
        • LabelImg (2)
        • Git (6)
        • GitHub (1)
        • Eclipse (7)
        • Visual Studio (1)
      • Web & Android (121)
        • SpringBoot (37)
        • Three.js (2)
        • Spring Data JPA (9)
        • 스프링 부트 쇼핑몰 프로젝트 with JPA (25)
        • Thymeleaf (4)
        • Spring Security (15)
        • Flutter (29)
      • Programming Language (61)
        • JAVA (27)
        • JavaScript (14)
        • Dart (2)
        • Python (15)
        • PHP (3)
      • Database (43)
        • PostgreSQL (32)
        • MYSQL (7)
        • Oracle (3)
        • MSSQL (1)
      • SERVER (17)
        • TCP_IP (3)
        • 리눅스 (7)
        • AWS (7)
      • Coding Test (445)
        • 백준[JAVA] (108)
        • 프로그래머스[JAVA] (260)
        • 알고리즘 고득점 Kit[JAVA] (3)
        • SQL 고득점 Kit[ORACLE] (74)
      • CS 지식 (49)
        • [자료구조] (14)
        • [네트워크] (12)
        • [데이터베이스] (10)
        • [알고리즘] (9)
        • [운영체제] (4)
      • 기타 (6)
      • 자격증 & 공부 (62)
        • 정보처리기사 (2)
        • SQLD (6)
        • 네트워크관리사 2급 (5)
        • 리눅스마스터 1급 (44)
        • 리눅스마스터 2급 (1)
        • ISTQB (3)
        • 시스템보안 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 인기 글

  • 태그

    programmers
    python
    JPA
    시큐리티
    리눅스
    데이터
    스프링부트
    리눅스마스터 1급
    자바
    Spring Security
    Oracle
    postgresql
    spring
    스프링
    스프링 부트 쇼핑몰 프로젝트 with JPA
    CS지식
    Java
    baekjoon
    플러터
    springboot
    Flutter
    backjoon
    DB
    리눅스마스터
    데이터베이스
    백준
    CS
    pcce 기출문제
    프로그래머스
    Linux
  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
woojin._.
[Spring Data JPA] 영속성 전이, 고아객체
상단으로

티스토리툴바