영속성 전이 (CASCADE) (+ 고아 객체)

2025. 4. 3. 13:16·JPA
목차
  1. 영속성 전이와 고야 객체는 무엇인가?
  2. 영속성 전이  (CASCADE)
  3. 고아 객체  (Orphan Entity)

 

 

 


 

영속성 전이와 고야 객체는 무엇인가?

 

 


 

 

 

 

영속성 전이  (CASCADE)

 

--

영속성 전이는

특정 엔티티를 영속 상태로 만들 때 해당 엔티티와 연관된 엔티티도 함께 영속 상태로 만들기 위해 사용된다.

즉, 부모 엔티티의 상태 변경이 자식 엔티티에도 전이되도록 설정하는 기능으로

부모 엔티티에 대한 데이터를 저장할 때 자식 엔티티도 함께 저장된다.

 

@Entity
public class Parent {
   
   @Id
   @GeneratedValue
   private Long id;

   private String name;

   @OneToMany(mappedBy = "parent", cascade = CascadType.ALL)
   private List<Child> childList = new ArrayList<>();

   ...
}
@Entity
public class Child {
   
   @Id
   @GeneratedValue
   private Long id;

   private String name;

   @ManyToOne
   @JoinColumn(name = "parent_id")
   private Parent parent;
   
   ...
}

 

원래 부모 엔티티에 "mappedBy" 속성만 정의해주면

childList에 저장한 값들이 Child 엔티티에도 자동으로 추가된다.

 

이 말은

Parent를 persist(저장 전이)를 할 때 그 안에 있는 childList에 담긴 값들도 모두 persist 한다.

즉, Parent의 childList에 값을 2개 추가하고 Parent를 persist 하면

Child에 2개의 값 모두 각각 persist를 하게 되어 Child에 값이 2개 추가된다.

 

CASCADE 종류

 

영속성 전이(CASCADE)의 주의사항

  • 연관관계를 매핑하는 것과 관련 X
  • 엔티티를 영속화할 때 연관된 엔티티도 같이 영속화하는 편리함을 제공하는 것뿐
  • CASCADE 속성은 부모 엔티티 쪽에 정의
일반적으로 ALL, PERSIST만 사용
(일반적으로 소유자(부모)가 하나일 때만 사용하는 것이 좋음)

--

 

 

 

 

고아 객체  (Orphan Entity)

 

--

고아 객체는

부모 엔티티와 연관관계가 끊어진 자식 엔티티를 의미하며,

부모 엔티티에서 자식 엔티티를 삭제하면 해당 자식 엔티티가 자동으로 삭제되는 개념이다.

 

"orpahnRemoval" 속성을 통해 설정할 수 있으며 해당 속성 값은 "true" 또는 "false"를 사용한다.

  • true  :  자동 삭제 O
  • false (기본값)  :  자동 삭제 X

 

고아 객체 주의점

  • 참조가 제거된 엔티티는 다른 곳에서 참조하지 않는 고아 객체로 판단하여 삭제된다.
  • 참조하는 곳이 하나인 경우에만 사용해야 한다.
  • 특정 엔티티가 개인 소유일 때 사용해야 한다.
  • @OneToOne, @OneToManyu에만 사용 가능

 

OrphanRemoval = true와 CascadType.REMOVE의 차이점

 

영속성 전이 + 고아 객체 (생명 주기)
CascadeType.ALL + orphanRemoval = true를 모두 설정하면
부모 엔티티를 통해 자식의 생명 주기를 관리할 수 있다.
즉, 부모 엔티티에서 자식의 대한 것을 관리할 수 있게 된다.
해당 설정은 주로 도메인 주도 설계(DDD)의 Aggregate Root 개념을 구현할 때 유용하다.

--

 

 

 

 

 


참고 및 출처

  • https://www.inflearn.com/course/ORM-JPA-Basic/dashboard

 

 

 

 

저작자표시 비영리 변경금지 (새창열림)

'JPA' 카테고리의 다른 글

객체지향 쿼리 언어(OOQL) 종류  (0) 2025.04.05
JPA의 데이터 타입  (0) 2025.04.04
즉시 로딩 및 지연 로딩 (+ JPA의 프록시)  (1) 2025.04.02
상속관계 매핑 (+@MappedSuperclass)  (1) 2025.04.01
연관관계 매핑 (단방향, 양방향, 1:1, 1:N, N:1, N:N)  (0) 2025.03.31
  1. 영속성 전이와 고야 객체는 무엇인가?
  2. 영속성 전이  (CASCADE)
  3. 고아 객체  (Orphan Entity)
'JPA' 카테고리의 다른 글
  • 객체지향 쿼리 언어(OOQL) 종류
  • JPA의 데이터 타입
  • 즉시 로딩 및 지연 로딩 (+ JPA의 프록시)
  • 상속관계 매핑 (+@MappedSuperclass)
아-니지
아-니지
아-니지
성장 기록.zip
아-니지
  • 분류 전체보기 (266)
    • Language (76)
      • Java (39)
      • Kotlin (0)
      • HTML (10)
      • CSS (17)
      • Java Script (10)
    • JPA (11)
    • Spring Boot (27)
    • QueryDSL (2)
    • SQL [DB] (8)
    • Docker (29)
    • AWS (19)
    • Git & GitHub (17)
    • DevOps (1)
    • Terminology (14)
    • CS (50)
      • 컴퓨터 구조 (12)
      • 운영체제 (11)
      • 자료구조 (11)
      • 알고리즘 (0)
      • 네트워크 (16)
    • Record (7)
      • 알고리즘 풀이 (4)
      • 자바 메서드 (3)
    • Self Q&A (5)
hELLO· Designed By정상우.v4.5.3
아-니지
영속성 전이 (CASCADE) (+ 고아 객체)

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.