inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

엔티티 클래스 개발1

일대 다 & 다대일 관계 삭제 시

해결된 질문

874

jh

작성한 질문수 8

1

안녕하세요! 더운 여름인데 건강은 잘 챙기고 계신지요? 항상 고생 많으십니다!

예제의 Order - OrderItem - Item 관계에서 삭제 시에 궁금한 점이 있어서 고민하다가 남겨봅니다..!

현재 Order에서 OrderItem을 @OneToMany(cascadeType.ALL)로 가지고 있어, Order save & 삭제시에는 OrderItem이 cascade 되어 저장, 삭제가 되고 있습니다.

하지만 Item에는 OrderItem -> Item간 단방향 mapping만 걸려있습니다. 만약 Item이 삭제될 경우에는 FK 제약조건으로 예외가 발생하게 됩니다. 

이를 위한 해결방안으로 아래 3가지를 고려해보았습니다.

  1. Item에도 OrderItem Collection을 두고, Cascade 또는 Orphanremoval을 통해 연관된 OrderItem을 삭제한다.
    -> 삭제 시에만 사용되므로 비효율적으로 생각됨.
  2. Item을 soft delete로 관리한다.
  3. OrderItem(repository)을 대상으로 삭제하려는 Item을 FK로 가진 내용을 모두 삭제한 후 마지막으로 Item을 제거한다.

 

여러 질문에서 남겨주신 Cascade 관련 답변을 읽어보았고, 해당 엔티티를 한쪽에서 life cycle을 확실히 관리할 경우에만 사용하라고 이해를 했습니다. 하지만 위의 1처럼 양쪽에서 관리를 할 경우에도 개발자가 확실하게 life cycle을 이해한다면 문제가 없을 것으로 보이는데, 잘못 생각하고 있는걸까요?

중간 테이블에 대한 추가 / 제거를 고려하기가 쉽지 않네요..! 고려한 방법에서 발생할 수 있는 문제가 어떤건지, 더 좋은 방법이 있는지 질문드립니다!

 

웹앱 java spring-boot JPA spring

답변 1

2

김영한

안녕하세요. jh님

3가지 모두 고려 대상이 됩니다.

그런데 cascade는 강의에서 설명드린 것 처럼 개인 소유일 때만 사용해야 하는데, OrderItem은 Order와 강하게 묶여 있으므로 사용하면 위험합니다.

2,3 중에 하나를 고민하시는 것이 좋아보입니다.

또는 해당 부분의 외래키 제약조건을 걸리 않는 것도 방법입니다.

감사합니다.

0

jh

답변 감사드립니다!!

안녕하세요 치킨 디도스 이벤트 보고 흉내내보려 들어왔습니다..

0

26

2

OrderServiceTest 상문주문 테스트 시 update 쿼리 문의

0

42

1

sdk 설정 오류

0

85

2

오탈자 - @Transactional

0

79

1

src/test/resources 테스트 경로 문제

0

76

1

상품 등록후 H2 db 출력 순서 바꿀 수 있나요?

0

74

1

MemberRepositoryTest 실행오류

0

101

1

boot 4.x >>> trasasction rolled back log & p6spy(영한님, 수업 자료 업데이트 해주시면 감사하겠습니다!!)

1

206

2

강의 마지막 QueryDSL 사용 부분 질문있습니다

1

163

2

클라이언트에서 isbn과 author 수정 요청을 한 경우에 대해 질문드립니다.

0

61

1

도메인 모델 패턴 vs 트랜잭션 스크립트 패턴

0

91

1

기본 생성자

0

71

1

h2 DB 연결시 jdbc url 변경 이유가 궁금합니다.

0

111

1

멤버서비스테스트 부분에서 막힙니다.

0

190

4

실무에서도 EntityManager를 이용해서 많이 작업하는 편일까요?

0

134

1

초반에 h2 다운로드 과정 꼭 필요한가요?

0

135

2

자신 필드에도 get으로 접근하는 이유가 있을까요?

0

126

1

24분 27초 연관관계 편의 메서드 위치

0

122

1

단건 주문만 가능하게 한건 의도한 부분이신가요?

0

120

2

빌드 툴, Gradle

0

75

1

h2연결은 된 것 같은데 엔티티 테이블까지 작성 후 확인해보아도 테이블이 안보입니다

0

86

2

Repository에서 EntityManager 주입 방식 차이

0

100

1

롬복과 사용자 정의 setter 메서드

0

80

1

주문 목록 조회 fetch join 질문드립니다

0

94

1