1. 영속성전이(CASCADE)

  • 특정 엔티티를 속 상태로 만들 때 연관된 엔티티도 함께 속 상태로 만들도 싶을 때 
  • 예시: 부모 엔티티를 저장할 때 자식 엔티티도 함께 저장.

영속성 전이는 즉시로딩, 지연로딩, 연관관계 세팅과 전혀 관계가 없습니다. 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만들고 싶을 때 사용합니다.

Child child1 = new Child();
Child child2 = new Child();

Parent parent = new Parent();
parent.addChild(child1);
parent.addChild(child2);

em.persist(parent);
em.persist(child1);
em.persist(child2);

persist를 위의 코드와 같이 3번을 호출해야 3개의 insert문이 DB에 나갑니다. 그런데 이게 상당히 귀찮은 작업입니다.

그래서 parent를 persist할때 child도 자동으로 persist도 됐으면 좋겠을 때 사용하는게 바로 CASCADE입니다.

Child child1 = new Child();
Child child2 = new Child();

Parent parent = new Parent();
parent.addChild(child1);
parent.addChild(child2);

em.persist(parent);

parent에 cascade=CascadeType.PERSIST를 걸고 다시 실행을 해보면 child도 persist 되는걸 확인 할 수 있습니다.

2. CASCADE의 종류

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

여러가지가 있는데, 저장할 때만 쓸꺼면 PERSIST하면되고, 아니면 ALL 쓰시면됩니다. 라이프사이클 다 맞춰야하면 ALL, 위험하니까 저장할때만 라이프사이클 맞출꺼면 PERSIST를 사용합니다. 실무에서도 실제로 많이 사용합니다. 그렇다면 이걸 언제 사용해야할까요? @OneToMany이면 다 걸어야할까요?

 

하나의 부모가 자식을 관리하면 이게 의미가 있습니다. 게시판과 첨부파일 이런 경우에는 쓸 수 있습니다.

쓰면 안되는 케이스는 그 파일을 여러군데에서 관리함. 다른 entity에서도 관리하고 그러면 쓰면 안됩니다. 즉, 소유자가 하나일때 사용하면 됩니다.

 

  1. 단일 entity에 완전히 종속적일때.
  2. parent와 child의 라이프 사이클이 유사할때

예를들어 parent와 child가 연관관계를 맺고있고, member와 child가 연관관계가 있으면 사용하면 안됩니다.

REFERENCE

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

 

자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런

JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다. 초급 웹 개발 서버 데이터베이스 프레임워크 및 라이브러리 프로그래밍 언어 서비스 개발 Java JPA Spring Data JPA 온라인 강의 ORM, JPA, 자바, java, 우아한형제들

www.inflearn.com

 

'JPA' 카테고리의 다른 글

[JPA] 임베디드 타입(복합 값 타입)  (0) 2020.04.26
[JPA] 고아객체  (0) 2020.04.22
[JPA] 즉시로딩과 지연로딩  (0) 2020.04.22
[JPA] 프록시  (0) 2020.04.22
[JPA] @MappedSuperclass 애노테이션  (0) 2020.04.19
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기