인프런 커뮤니티 질문&답변
CascadeType.ALL + orphanRemovel = true 와 그냥 CascadeType.ALL만 썼을 때의 차이
해결된 질문
작성
·
501
1
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
안녕하세요.
영한님의 강의를 모두사서.. 탐독하는 주니어 개발자 입니다 ㅎㅎ..
21:37 부분에 영속성 전이 + 고아 객체, 생명주기 파트에서 이해가 가지 않는 부분이 있어서요.
위에서 명시해놓으시기를 CascadeType.ALL + orpahanRemover=true 두 옵션을 모두 활성화 하면 부모 엔티티를 통해서 자식의 생명주기를 관리할 수 있음 이라고 명시되어있습니다.
제가 궁금한부분은 CascadeType.ALL 자체가 CascadeType.ALL + orpahanRemove=true 를 이미 모두 포함하고 있다는 생각이 드는데요..
CascadeType.All만 설정CascadeType.All+orpahanRemove=true모두 설정
두 가지의 차이가 있나요?
답변 1
5
자문자답..
많이 생각하고 고민하면, 답이 도출되네요..
시나리오 2가지를 가정해서 테스트 해보았습니다.
CascadeType.All만 설정해당 경우 부모 객체를 삭제하는 경우, 자식 객체까지 모두 삭제됨
findParent.getChildList().remove(0)의 경우 단순히 parent의 리스트에서 제거한 경우이기 때문에 고아객체가 되더라도 orphanRemove 설정이 없기때문에 DB에서 삭제되지 않고 DB속 FK키도 유지
CascadeType.All+orphanRemove=true모두 설정 시당연히, 부모 객체를 삭제하는 경우, 자식 객체까지 모두 삭제됨
findParent.getChildList().remove(0)의 경우orphanRemove = true설정으로인해 객체가 고아가 됨을 감지할 시 parent의 리스트에 삭제됨과 함께 DB에도 삭제
정도로 정리가 되는거 같습니다.!






안녕하세요. 조현화님, 공식 서포터즈 y2gcoder입니다.
잘 정리하신 것 같습니다.
파이팅입니다!
감사합니다.