인프런 커뮤니티 질문&답변

HH님의 프로필 이미지
HH

작성한 질문수

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

임베디드 타입

CascadeType.ALL과 orphanRemoval=true를 함께 사용하는것에 대한 질문

작성

·

321

1

안녕하세요

영속성 전이와 고아객체에 대해 복습하다가 궁금증이 생겨 질문 올립니다.

 

영속성 전이는 부모 엔티티의 생명주기에 종속적인 자식 엔티티의 상태변화를 같이 처리해주는 것으로

CascadeType.ALL 옵션은 부모 엔티티를 저장하거나 삭제, 변경 할 때, 자식 엔티티 역시 같이 저장하거나 삭제, 변경 해주는 걸로 알고 있습니다.

그리고 orphanRemoval=true 고아객체는 부모 엔티티와의 관계가 끊어지면 자동으로 삭제되는 자식 엔티티를 의미한다고 하였습니다.

 

여기서 궁금증이 생겼습니다.

CascadeType.ALL 를 설정하면 부모 엔티티가 자식 엔티티의 생명주기를 처리해주는데

orphanRemoval=true 을 같이 사용해 자식 엔티티가 삭제되는 것이 중복될 텐데

왜 이 두옵션을 같이 사용하는지 잘 모르겠습니다..

검색을 해봐도 두 옵션을 같이 사용하는 경우에는

부모 엔티티와 관계된 자식 엔티티의 생명주기를 부모 엔티티에서 한 번에 관리할 수 있다고 하는데

어차피 CascadeType.ALL 옵션하나로 부모 엔티티가 자식 엔티티의 생명 주기를 관리하는데

어떤 이유에서 같이 사용하는 건가요 ??

 

 

답변 1

-2

안녕하세요, 인프런 AI 인턴이에요.

CascadeType.ALL과 orphanRemoval=true는 비슷한 역할을 수행하지만, 목적이 다릅니다.

CascadeType.ALL은 부모 엔티티의 상태변화와 관계된 모든 자식 엔티티의 상태를 동시에 변경하거나 삭제하고 싶을 때 사용합니다. 반면에, orphanRemoval=true는 자식 객체와 부모 객체 간의 관계가 종료되었을 때, 자식 객체를 자동으로 삭제하고 싶을 때 사용합니다.

따라서 CascadeType.ALL과 orphanRemoval=true을 동시에 사용하면, 부모 엔티티를 삭제할 때 자식 엔티티가 모두 삭제된다는 것을 보장할 수 있습니다.

하지만, CascadeType.ALL과 orphanRemoval=true를 함께 사용하는 것이 항상 필수적인 것은 아닙니다. 각각의 상황에 맞게 옵션을 선택해야 합니다.

제가 도움을 드린 것이 실제 도움이 되셨길 바랍니다. 감사합니다.

HH님의 프로필 이미지
HH
질문자

흠.. GhatGPT에 물어본 결과와 똑같은데
이 답변 대로라면 CascadeType.ALL은 부모와 자식 엔티티의 영속성만을 관리하고 DB에 영향은 안주고
DB에서 자식 엔티티를 삭제하고 싶다면 orphanRemoval=true를 동시에 사용해야 한다는말인가요 ?

HH님의 프로필 이미지
HH

작성한 질문수

질문하기