해결된 질문
작성
·
440
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
4
자문자답..
많이 생각하고 고민하면, 답이 도출되네요..
시나리오 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입니다.
잘 정리하신 것 같습니다.
파이팅입니다!
감사합니다.