[SPRING] JPA - Cascade

RuiN·2022년 8월 1일
0

Spring

목록 보기
3/8
post-thumbnail

CASCADE

@OneToMany 나 @ManyToOne 에 옵션으로 줄 수 있다.
Entity의 상태변화를 전파시키는 옵션.
기본적으로는 아무것도 전파시키지 않는다.

영속성 전이


Entity Status

  • Transient = DB와 Mapping 된 것이 아무것도 없는 것 ( 주석 , 비고 )
  • Persistent = 저장 후 , JPA가 관리하는 상태
  • Detached = JPA가 더이상 관리하지 않는 상태
  • Removed = Commit이 일어날때 삭제

JPA Cascade Type

  • ALL
  • PERSIST
  • MERGE
  • REMOVE
  • REFRESH
  • DETACH

CascadeType.ALL

  • 상위 Entity에서 하위 Entity로 모든 작업을 전파

CascadeType.PERSIST

  • 하위 Entity 까지 영속성을 전달

CascadeType.MERGE

  • 하위 Entity 까지 병합 작업을 지속

CascadeType.REMOVE

  • 하위 Entity 까지 제거 작업을 지속

CascadeType.REFRESH

  • DB로 부터 인스턴스 값을 다시 읽어 옴 ( 새로 고침 )

CascadeType.DETACH

  • 영속성 컨텍스트에서 Entity 제거

    /**
     * (Optional) The operations that must be cascaded to 
     * the target of the association.
     *
     * <p> By default no operations are cascaded.
     */
    CascadeType[] cascade() default {};

위와 같은 정의를 내리고 있어서

CascadeType을 여러개 설정할 수 있다.


+@

OrpanRemoval

부모 Entity와 연관관계가 끊어진 자식 Entity를 자동으로 삭제해주는 기능

기본값은 False.
@OneToOne 과 @OneToMany 에서만 사용이 가능

CascadeType.ALL + orphanRemoval = True

위와 같이 두개를 같이 설정해주면,
부모 Entity 가 자식 Entity의 LifeCycle을 모두 관리 할수 있게 된다.

profile
어디까지 올라갈지 궁금한 하루

0개의 댓글