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

임현강님의 프로필 이미지
임현강

작성한 질문수

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

영속성 전이(CASCADE)와 고아 객체

의문점 + 질문

작성

·

116

0

(의문점)

단일참조가 아닐 경우 orphanRemoval을 사용하지 말아야 하는 이유에 대해서는 이해가 됩니다만..

부모가 여럿이 있는 자식 객체가 있다고 했을 때, 하나의 부모가 없어진다해도 다른 부모쪽에는 참조가 되어있으니 아직 고아가 아닌 거 아닌가요?;

마치 아버지가 사망했다고 모자관계까지 끊어버리는 느낌..? 

이상하네요; 

너무 쓸 데 없이 Real World에 대입해서 생각하는걸까요?

(질문)

orphanRemoval = true를 사용한다는 게 결국 CascadeType.REMOVE와 똑같은 말 아닌가요?

그럼 CascadeType.ALL을 사용하면 굳이 orphanRemoval = true는 사용할 필요가 없는 것 아닌가 싶습니다.

자식의 생명주기를 부모가 관리하기 위해서 꼭 저 두 속성을 함께 써야하는 이유가 무엇인지 궁금합니다.

감사합니다.

답변 1

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 현강님

마치 아버지가 사망했다고 모자관계까지 끊어버리는 느낌..? 

-> JPA를 구현하는 입장에서 생각해보면, 모든 연관관계가 다 삭제되어야 자식이 삭제된다고 구현해야 한다면? 어떻게 개발해야 할까? 이렇게 고민해보면 답을 찾을 수 있습니다. 데이터베이스에 있는 모든 데이터를 다 찾아서 함께 연결되어 있는 아버지가 있는지 테이블을 다 뒤져보아야 합니다. 기술적으로 이런 부분을 해결할 수도 있지만, 실용적이지는 않은 것이지요. 그래서 애매한 경우에는 orpahnRemovel을 권장하지 않습니다.

질문으로 돌아가서

제가 답을 바로 드릴 수도 있지만, 그러면 더 많은 것을 얻어가실 수 없으니

orphanRemoval = true와 CascadeType.REMOVE의 차이를 코드로 테스트하면서 한번 정리하고 남겨주시겠어요?

임현강님의 프로필 이미지
임현강
질문자

답변 감사합니다 강사님

조언해주신대로 실습해보고도 이해가 안 가면 다시 질문 드리겠습니다~

감사합니다!

임현강님의 프로필 이미지
임현강

작성한 질문수

질문하기