본문 바로가기

카테고리 없음

cascade? (=종속)

캐스케이드 옵션이란,

엔티티의 상태변화를 연관되어있는 엔티티에도 전파 시키는 옵션이다.

(부모 엔티티의변화를 자식 엔티티로 전파)

onetomany나 manytoone에 적용시킬 수 있다.

기본적으로는 아무것도 전파시키지 않는다.

 

Entity의 상태

 

1. Transient() : 객체를 생성하고 값을 주어도, JPA나 hibernate가 아무것도 모르는 상태. 즉, db왜 매핑된것이 아무것도 없다.

 

2. Persistent() : 저장을 하고 나서, JPA가 알고 관리하는 상태. 그러나 save()를 했다고 해서 db에 바로 저장되는 것은 아님. jpa가 persistent상태로 관리하고 있다가, 이후에 데이터를 저장한다. (1차 캐시, Dirty Checking(변경사항 감지), Write Behind(최대한 늦게, 필요한 시점에 DB에 적용) 등의 기능을 제공한다)

 

3. Detatched() :  JPA가 더이상 관리하지 않는 상태. JPA가 제공해주는 기능들을 사용하고 싶다면, 다시 persistent 상태로 돌아가야한다.

4. Removed() : JPA가 관리하는 상태이긴 하지만, 실제 commit이 일어날 때, 삭제가 일어난다.

 

cascade는 위의 네개와 같은 상태변화를 전이 시키는 것이다.

parent-child 관계에 있는 도메인에 적용 할 수 있다.

ex) Post-Comment 엔티티.

게시글이 존재하고, 해당 게시물에 달린 댓글들은 만약 이 게시글이 저장되거나 삭제되면 같이 저장되거나, 삭제되어야한다고 가정한다.