inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

의문점 + 질문

172

akakakakak

작성한 질문수 83

0

(의문점)

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

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

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

이상하네요; 

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

(질문)

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

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

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

감사합니다.

JPA java

답변 1

0

김영한

안녕하세요. 현강님

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

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

질문으로 돌아가서

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

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

0

akakakakak

답변 감사합니다 강사님

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

감사합니다!

0

조태준

테스트를 해보니 아래와 같은 결론이 나오네요.

 

CascadeType.REMOVE 의 경우는 findParent.getChildList().remove(0) 를 해도 자식이 삭제가 안 되고

orphanRemoval = true 는 삭제가 된다. (대신, CascadeType.ALL 속성이 있어야 됨)

실무 조언 관련 질문입니다.

0

38

1

H2데이터베이스 파일 생성

0

46

2

서브쿼리 강의에서 ALL 예시 관련 질문드립니다.

0

48

2

수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?

0

45

1

JPQL 메소드와 락

0

48

1

Delivery @OneToOne

0

54

1

17강 4~5분대 테이블 값 조회가 안됩니다.

0

85

2

UnsupportedOperationException 발생

0

80

3

H2 Database 연결이 안됩니다.

0

87

2

연관관계 매핑 질문드립니다.

0

78

2

h2데이터베이스 실행오류

0

103

2

persistence.xml

0

101

2

양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?

0

75

1

영속성 컨텍스트

0

60

1

JPA 프록시

0

87

1

Native Query와 MyBatis

0

62

1

영속성 컨텍스트는 어떤 메모리에 저장되는건가요?

0

81

1

임베디드 타입 예시 코드 관련 질문

0

110

3

명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요

0

89

3

인텔리제이 패키지 커서 단축키 질문

0

103

2

혹시 현재는 ID 데이터 타입이 String이면 안되나요?

0

134

1

양방향 연관관계 시 연관관계 주인을 설정하는 이유

0

67

1

임베디드 타입과 MappedSuperClass의 차이점이 궁금합니다.

0

95

1

데이터베이스가 초기화되는 것 같아요

1

172

2