inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

실전 예제 5 - 연관관계 관리

Order의 orderItems에 orphanRemoval 주지 않는 이유가 따로 있으신 가요?

해결된 질문

375

궁금이

작성한 질문수 49

1

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]

여기 보면, 주문과 주문 상품은 완전히 종속적일 것 같은 느낌이고,

cascade도 ALL이라서 완전히 부모에서 관리할 것 같은 느낌이라..

예제에서 보통 실무에서 쓸만한거 거진 예시로써 사용해 왔는데, orphanRemoval는 사용하지 않았던 이유가 궁금합니다.

딱히 이유는 없고 충분히 고려할 수도 있는 내용인지, 아니면 뭐 orphanRemoval는 실무에서 잘 안쓴다던지 궁금합니다.

아니면 보통 인터넷 쇼핑 이용할 때 주문상품 중 하나를 빼고 싶을 때 뺄 수 있는게 아니라 주문 자체를 다시 해야 하는 경우가 많아서 그런 비즈니스 적인 이유 때문에 그런건가요?

그럴 경우는 오히려 고아객체라고 삭제하면 위험해질 수 있으니..?

java jpa

답변 2

1

김영한

안녕하세요. 궁금이님

이 부분은 본인의 비즈니스에 상황에 따라 선택을 하면 됩니다.

이 경우에는 orphanRemoval을 적용하셔도 괜찮습니다 :)

예제의 경우 예제를 설계할 때 학습 상황에 맞추어 이야기하기 때문에 예제가 정답이라고는 생각하시지 않으셔도 됩니다^^

감사합니다.

 

 

0

인프런 AI 인턴

안녕하세요 궁금이 님, 인프런 AI 인턴이에요.

[질문 내용]에 대한 답변을 드리겠습니다. orphanRemoval 속성은 JPA에서 부모-자식 관계에서 자식 엔티티가 부모와 분리될 때 해당 자식 엔티티를 자동으로 삭제하는 기능입니다. orphanRemoval을 사용하지 않는 이유는 다양합니다.

첫째로, cascade 속성이 ALL로 설정되어 있다면, 부모 엔티티를 삭제하면 자식 엔티티도 자동으로 삭제됩니다. 따라서 orphanRemoval을 명시적으로 사용하지 않아도 자식 엔티티는 부모의 생명주기에 종속되어 삭제될 수 있습니다.

둘째로, orphanRemoval을 사용하지 않는 이유는 비즈니스 규칙에 따라 자식 엔티티를 삭제할 때 특별한 로직이 필요한 경우입니다. 예를 들어, 인터넷 쇼핑에서 주문을 삭제할 때 주문 상품 중 하나를 제외하고 싶으면 해당 주문 상품을 다시 추가해야 할 수 있습니다. 이러한 경우에 orphanRemoval을 사용하지 않는 것이 더 유연하고 적합할 수 있습니다.

세번째로, orphanRemoval을 사용하면 실수로 필요한 자식 엔티티를 삭제하는 위험이 있습니다. 만약 고아 객체(부모를 참조하지 않는 자식 엔티티)를 삭제하면 실제로 데이터베이스에서도 해당 자식 엔티티가 삭제되기 때문입니다. 따라서 고아 객체를 신중하게 다루어야 하며, 정확한 비즈니스 규칙에 맞추어 사용해야 합니다.

이러한 이유들 때문에 orphanRemoval을 사용하지 않을 수도 있습니다. 하지만, 실제 각 프로젝트와 비즈니스 요구사항에 따라 다르므로, 해당 프로젝트에 맞는 관리 방식을 선택하는 것이 중요합니다. 고맙습니다!

inheritance startegy 선택시 고려사항

0

11

0

Entity 동등성 비교

0

14

1

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

0

41

1

H2데이터베이스 파일 생성

0

52

2

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

0

49

2

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

0

48

1

JPQL 메소드와 락

0

53

1

Delivery @OneToOne

0

57

1

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

0

89

2

UnsupportedOperationException 발생

0

82

3

H2 Database 연결이 안됩니다.

0

89

2

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

0

82

2

h2데이터베이스 실행오류

0

105

2

persistence.xml

0

103

2

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

0

77

1

영속성 컨텍스트

0

62

1

JPA 프록시

0

90

1

Native Query와 MyBatis

0

63

1

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

0

84

1

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

0

112

3

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

0

91

3

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

0

106

2

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

0

138

1

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

0

68

1