본문으로 바로가기

Cascade

엔티티의 상태 변화를 전파 시키는 옵션

 

이렇게 Study 클래스가 있을 때 예를 들어서

영어 스터디에서 수학 스터디로 바뀌었다고 치면

Study 클래스 내부에 있는 owner 정보도 영어 -> 수학 스터디로 바뀌었다는 걸

알려줘야 하는데 이때 사용하는 엔티티의 상태 변화를 전파 시키는 옵션

 

엔티티의 상태는 4가지 상태

  1. Transient JPA가 모르는 상태
  2. Persistent JPA가 관리중인 상태 (1차캐시 ,Dirty Checking, Write Behind)
  3. Detached JPA가 더이상 관리 하지 않는 상태
  4. Removed JPA가 관리하긴 하지만 삭제하기로 한 상태

 

그럼 이러한 상태 변화를 토대로 Cascade 옵션에 대해서 알아보겠다.

 

일단 부모-자식 관계로 형성 돼 있는게 좋으니 Posts와 Comments로 양방향 맵핑을 해준다

 

 

 

 

지금 보면 posts만 저장하고 있다.

comments에 대한건 일체 저장하지 않고 있다.

 

 

DB에는 어떻게 들어가는지 확인해보자

posts는 저장했으니 잘 들어갔다.

 

 

 

그 다음 comment를 확인해보자

 

 

sessin으로 posts만 save 했으니 당연히 comments엔 값이 들어가지 않았다.

그러면 여기서 아까 배운 영속성을 바탕으로 상태가 변할때 같이 변하게 하면 어떻게 될까?

 

 

Posts가 저장될때 comments의 상태도 persistent가 되게 하기 위해 추가를 해줬다.

이제부턴 Posts의 상태가 transient에서 persistent로 변하면 comments도 같이

상태가 변하게 될 것이다.

 

 

 

 

추가하고 확인해보자.

 

 

 

값이 잘 들어갔다.

마찬가지로 이렇게 하면 Posts를 삭제하면 comments도 같이 삭제된다.