CASCADE 질문드립니다.
58
108 asked
안녕하세요. Order와 OrderItem엔티티에 있는 CASCADE에 대해 기본편을 복습해도 헷갈린 부분이 있어서 질문드립니다.
em.persist(order)를 하면 CascadeType.ALL때문에 Delivery랑 OrderItem도 insert가 되는거 같은데,
@ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "order_id") private Order order; OrderItem에 있는 이 부분에 CASCADE를 적어준게 아니라
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL) private List<OrderItem> orderItems = new ArrayList<>(); 왜 Order에 있는 여기에다가 CASCADE를 적어준것일까요? 어디에다 두어도 상관없을거 같은데, 특별한 규칙이 있는것인지 질문드립니다.
Answer 1
0
안녕하세요, 인프런 AI 인턴입니다. 오리쉐리님.
질문해주신 @OneToMany와 @ManyToOne 관계에서 CascadeType의 사용에 대한 혼동이 이해됩니다.
CascadeType 사용 위치
CascadeType은 주로 부모-자식 관계에서 부모 엔티티에 설정됩니다. 여기서 “부모”는 외래 키 관계에서 연관 관계의 주인이 아닌, 이 연관 관계를 소유하고 있는 쪽입니다.
왜 @OneToMany에 CascadeType을 설정할까요?
부모 엔티티 중심:
@OneToMany관계에서는 부모 엔티티(이 경우 Order)가 자식 엔티티(여러 OrderItem)를 가지고 있는 구조입니다. 부모의 생명주기와 자식의 생명주기를 동일하게 관리하고 싶다면 부모 엔티티의@OneToMany연관 관계에CascadeType을 설정합니다.관리 편리성:
Order를 저장할 때 연관된OrderItem도 함께 저장하려면Order에CascadeType.ALL을 설정하는 것이 더 자연스러운 방법입니다. 이는 종속된 엔티티의 저장, 삭제 등을 하나의 트랜잭션에서 관리할 수 있게 합니다.
@ManyToOne에서 CascadeType 설정하지 않는 이유
@ManyToOne 관계에서는 일반적으로 자식 엔티티(여러 OrderItem)가 부모 엔티티(Order)를 참조하는 상황입니다. 변동 사항이 있을 때마다 자식 엔티티에서 참조하는 부모 엔티티의 데이터를 함께 변경할 이유는 크게 없기 때문이죠. 그래서 CascadeType은 주로 자식의 생명주기를 관리할 필요가 있을 때 사용합니다.
결론
결국, CascadeType을 어디에 설정하느냐는 엔티티 사이의 연관관계와 해당 어플리케이션에서의 사용 사례에 따라 다릅니다. 보통 부모-자식 관계에서 부모에 설정을 하고, 부모를 통해 자식들을 관리하는 방식이 일반적입니다.
보다 구체적인 예시와 설명이 필요하면, 아래 비슷한 질문의 URL을 참고하시면 도움이 될 것입니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
sdk 설정 오류
0
43
2
오탈자 - @Transactional
0
50
1
src/test/resources 테스트 경로 문제
0
49
1
상품 등록후 H2 db 출력 순서 바꿀 수 있나요?
0
62
1
MemberRepositoryTest 실행오류
0
73
1
boot 4.x >>> trasasction rolled back log & p6spy(영한님, 수업 자료 업데이트 해주시면 감사하겠습니다!!)
1
181
2
강의 마지막 QueryDSL 사용 부분 질문있습니다
1
135
2
클라이언트에서 isbn과 author 수정 요청을 한 경우에 대해 질문드립니다.
0
50
1
도메인 모델 패턴 vs 트랜잭션 스크립트 패턴
0
71
1
기본 생성자
0
59
1
h2 DB 연결시 jdbc url 변경 이유가 궁금합니다.
0
100
1
멤버서비스테스트 부분에서 막힙니다.
0
163
4
실무에서도 EntityManager를 이용해서 많이 작업하는 편일까요?
0
115
1
초반에 h2 다운로드 과정 꼭 필요한가요?
0
117
2
자신 필드에도 get으로 접근하는 이유가 있을까요?
0
108
1
24분 27초 연관관계 편의 메서드 위치
0
112
1
단건 주문만 가능하게 한건 의도한 부분이신가요?
0
106
2
빌드 툴, Gradle
0
57
1
h2연결은 된 것 같은데 엔티티 테이블까지 작성 후 확인해보아도 테이블이 안보입니다
0
73
2
Repository에서 EntityManager 주입 방식 차이
0
87
1
롬복과 사용자 정의 setter 메서드
0
70
1
주문 목록 조회 fetch join 질문드립니다
0
79
1
dirty checking 질문드립니다.
0
78
1
동시성 관련 질문입니다
0
70
1

