Day 24 숙련 스프링 (2)

정채림·2026년 2월 11일

영속성 전이 (Cascade)

Cascade는 부모 엔티티의 영속성 상태 변화를 자식 엔티티에게 그대로 전파하는 기능입니다.
@OneToMany(cascade = CascadeType.XXX) 와 같은 형태로 사용합니다.
cascade 옵션을 정의하지 않으면 아무런 영속성 전이 기능도 적용되지 않습니다.

  1. CascadeType.ALL
    설명
    모든 Cascade 옵션을 적용합니다. (PERSIST + REMOVE + MERGE + REFRESH + DETACH)
    부모와 자식의 생명주기가 완벽하게 일치할 때 사용합니다.

  2. CascadeType.PERSIST
    설명:
    부모 엔티티를 저장할 때, 연관된 자식 엔티티도 함께 저장됩니다.;

  3. CascadeType.REMOVE
    설명
    부모 엔티티를 삭제할 때, 연관된 자식 엔티티도 함께 삭제됩니다.

  4. CascadeType.MERGE
    설명
    준영속(detached) 상태의 부모 엔티티를 병합할 때, 그 변경사항을 자식 엔티티에도 적용합니다.

  5. CascadeType.REFRESH
    설명
    데이터베이스로부터 부모 엔티티의 상태를 다시 읽어올 때(refresh), 자식 엔티티도 함께 다시 읽어옵니다.
    용도
    DB에서 발생한 다른 변경사항을 엔티티에 다시 반영하고 싶을 때 사용합니다.

  6. CascadeType.DETACH
    설명
    부모 엔티티를 준영속 상태(detach)로 만들 때, 자식 엔티티도 함께 준영속 상태로 만듭니다.
    용도
    특정 엔티티와 그 하위 엔티티들을 영속성 컨텍스트의 관리에서 제외하고 싶을 때 사용합니다.

고아 제거 (Orphan Removal)

orphanRemoval = true 옵션은 부모와 자식의 연관관계 자체가 끊어지는 상황에 초점을 맞춥니다. 영속성 전이가 부모의 상태를 전파한다면, 고아 제거 옵션은 부모와 자식의 관계가 끊어지는 것을 감지합니다.

@OneToMany(orphanRemoval = true) 혹은 @OneToMany(orphanRemoval = false)

형태로 사용합니다.
기본값은 false 입니다.

0개의 댓글