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

오근혁님의 프로필 이미지
오근혁

작성한 질문수

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

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

cascade 관계에 대해서 질문이 있습니다..!

작성

·

224

0

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오) 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예

[질문 내용]
여기에 질문 내용을 남겨주세요.
안녕하십니까! 영한님 Casecade를 사용하면서 도저히 이해가 안되는 부분이 있어서 질문 드립니다...
 
현재 상황
Parent 와 Child가 부모와 자식으로 관계를 갖고 있습니다.
Child는 Child를 부모와 자식으로 갖고 있습니다.
Parent와 Child @OneToMany관계에 CasecadeType.ALL 과 OrphanRemoval.true를 걸어뒀고
Child와 Child의 @OneToMany에 CasecadeType.ALL 과 OrphanRemoval.true를 걸어뒀습니다.
 
둘다 Casecade.ALL과 Orphan.Removal.true를 건겁니다...
 
Parent parent = new Parent();
Child child1 = new Child();
Child child2 = new Child();
이렇게 인스턴스를 생성하고
이때
parent의 자식으로 child1 와 child2 를 넣고
child1의 자식으로 child2를 넣었습니다.
 
서로 연관관계를 넣어줬고
부모가 자식을 알고 자식도 부모를 압니다.
 
이때
parent.getChildren().remove(child2)를 하면
delete 쿼리가 나가지 않지만
child1.getChildren().remove(child2)를 하면
delete 쿼리가 나가서 데이터베이스에서 삭제가 되는 것을 확인했습니다...!
 
어째서 둘 중 하나만 delete 쿼리가 나가는지 궁금한데 도저히 해결 방법을 모르겠습니다 ㅠㅠㅠㅠㅠㅠㅠ
 
제 예상으로 둘다 Cascade가 걸렸있으니 parent에서도 지우고 child1에서도 지워야 성공적으로 child2가 지워질거 같은데 말이죠,...
 
혹시 ... child1의 부모가 parent인것과 관련이 있을까요..??
 
질문이 정신없어서 죄송합니다 ㅠㅠ
 
 

답변 3

0

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

안녕하세요. 오근혁님

CascadeType.ALL, OrphanRemoval.ture은 강의에서 설명드린 것 처럼 개인 소유일 때만 사용해야 합니다.

지금은 Parent도 Child를 가지고 Child도 Child를 가지고 있습니다. 이런 구조에서는 사용하시면 예측하지 못한 문제가 발생할 수 있습니다.

지금처럼 애매한 경우에는 EntityManager를 사용해서 직접 제거해주세요.

감사합니다.

 

오근혁님의 프로필 이미지
오근혁
질문자

친절하게 알려주셔서 감사합니다!! 영한님 답변 덕분에 하나 더 알아가게되었습니다!

0

오근혁님의 프로필 이미지
오근혁
질문자

안녕하세요! 영한님!

https://drive.google.com/file/d/1j--LeJz7YwoT46pSreiqyeA__rusAlFl/view?usp=sharing

저의 프로젝트 압축해서 올렸습니다. 그리고 간단하게 어떻게 실행해야 하는지에 대해서 적은 메모장도 함께 압축했습니다. 감사합니다!

0

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

안녕하세요. 오근혁님

전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.

구글 드라이브 업로드 방법은 다음을 참고해주세요.

https://bit.ly/3fX6ygx

 

주의: 업로드시 링크에 있는 권한 문제 꼭 확인해주세요

 

추가로 다음 내용도 코멘트 부탁드립니다.

1. 실행 방법을 알려주세요.

2. 어떻게 문제를 확인할 수 있는지 자세한 설명을 남겨주세요.

감사합니다.

오근혁님의 프로필 이미지
오근혁

작성한 질문수

질문하기