영속성 전이: CASCAED

JPA
2023. 11. 9. 22:11
목차
  1. 영속성 전이: CASCAED
  2. 고아 객체
  3. 영속성 전이와 연관관계 정리
728x90

영속성 전이: CASCAED

특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만들고 싶을 때

ex) 부모 엔티티를 저장할 때 자식 엔티티도 함께 저장

 

cascade = CasecadeType.ALL

@Entity
public class Parent {

    public List<Child> getChildList() {
        return childList;
    }

    public void setChildList(List<Child> childList) {
        this.childList = childList;
    }

    @OneToMany(mappedBy = "parent", cascade = CascadeType.ALL)
    private List<Child> childList = new ArrayList<>();
}
@Entity
public class Child {

    @Id
    @GeneratedValue
    private Long id;

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

 

실습

Child child1 = new Child();
Child child2 = new Child();
Parent parent = new Parent();
parent.addChild(child1);
parent.addChild(child2);
em.persist(parent);

em.persist(parent)만 했는데 child도 같이 persist 됐다.

 

CASCADE 적용하지 않았을 때

영속성 전이: CASCADE 주의

  • 영속성 전이는 연관관계를 매핑하는 것과 아무 관련이 없다.
  • 엔티티를 영속화할 때 연관된 엔티티도 함께 영속화 하는 편리함을 제공할 뿐이다.
  • 다른 엔티티와 영속성 전이된 엔티티가 매핑 관계가 있으면 영속성 전이를 사용하지 않는게 좋다

Member와 child가 매핑된 관계인데 child를 parent에 영속성 전이로 사용되면 관리가 힘들어진다.

 

CASCADE 종류

  • ALL: 모두 적용
  • PERSIST: 영속
  • REMOVE: 삭제
  • MERGE: 병합
  • REFRESH: REFRESH
  • DETACH: DETACH

 

고아 객체

orphanRemoval = true

  • 고아객체 제거: 부모 엔티티와 연관관계가 끊어진 자식 엔티티를 자동으로 삭제
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Child> childList = new ArrayList<>();

위 예제에서 Parent 엔티티에서  List<Child>로 child를 관리하고 있는데 그 중 어떤 child가 list에서 제외되면 삭제해준다

 

 

list에서 remove해서 0번째 child 데이터를 지웠는데 delete 쿼리가 나간 걸 볼 수 있다.

 

고아 객체 주의

  • 참조하는 곳이 하나일 때 사용해야한다.
    • 특정 엔티티가 개인 소유할 때 사용
  • CASCADE.REMOVE 처럼 동작한다.

CASCADE.REMOVE 처럼 동작
parent를 em.remove하게 되면 child도 다 삭제가 된다

영속성 전이와 연관관계 정리

CascadeType.ALL + orphanRemoval=true

 

스스로 생명주기를 관리하는 엔티티는 em.persist()로 영속화, em.remove()로 제거

위에 두 옵션을 활성화하면 부모 엔티티를 통해서 자식의 생명 주기를 관리할 수 있다.

도메인 주도 설계의 Aggregate Root개념을 구현할 때 유용하다.

728x90

'JPA' 카테고리의 다른 글

값 타입과 불변 객체와 값 타입 컬렉  (4) 2023.11.10
갑 타입  (1) 2023.11.10
즉시 로딩과 지연 로딩  (2) 2023.11.09
프록시  (1) 2023.11.09
고급 매핑  (0) 2023.11.09
  1. 영속성 전이: CASCAED
  2. 고아 객체
  3. 영속성 전이와 연관관계 정리
'JPA' 카테고리의 다른 글
  • 값 타입과 불변 객체와 값 타입 컬렉
  • 갑 타입
  • 즉시 로딩과 지연 로딩
  • 프록시
hapBday
hapBday
hapBday
개발자로 성장하기 위한 기록들
hapBday
전체
오늘
어제
  • 분류 전체보기 (204) N
    • CS (12)
      • 컴퓨터네트워크 (11)
      • 운영체제 (0)
      • 분산 시스템 (0)
      • 데이터베이스 (1)
    • Spring (47)
      • Spring 핵심 원리 (13)
      • Spring MVC (15)
      • Spring DB (12)
      • Spring Security (6)
    • JPA (14)
    • 알고리즘 (30)
      • 프로그래머스 (6)
      • 백준 (20)
    • Design Pattern (0)
    • 언어 (5)
      • JAVA (5)
    • ASAC 웹 풀스택 (38)
      • Spring Boot (21)
      • React (0)
      • DevOps (8)
    • 트러블슈팅 (16) N
    • DevOps (5)
      • Docker (5)
    • ETC (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • github

공지사항

  • 블로그 이전

인기 글

태그

  • aws lambda
  • s-lock
  • basicerrorcontroller
  • 오블완
  • Session
  • 백준
  • MVC
  • multi-stage
  • 티스토리챌린지
  • 트랜잭션
  • spring security
  • CORS
  • docker workflow
  • spring boot
  • CSRF
  • S3
  • 인프런
  • jwt
  • cookie
  • 김영한
  • 프로그래머스
  • Spring
  • currency control
  • docker best practices
  • JPA
  • 3-layerd 아키텍쳐 패턴
  • docker
  • 구현
  • x-lock
  • Java

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.3.0
hapBday
영속성 전이: CASCAED
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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