• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

몇가지 궁금한점에 대해 질문합니다.

22.06.15 00:10 작성 조회수 315

1

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

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

[질문 내용]
안녕하세요.
1.
 
2.
사진첨부해드리고 말씀드리겠습니다
 
1) member객체를 인스턴스하고, em.persist(member)를 할 시점에서 List<Order>에 여러 order객체들이 있을경우
같이 저장하기위해 CASCADE를 ALL로 지정한게 맞는지 궁금합니다.
 
2) 위의 내용이 맞을 때, 밑에 내용에서 createOrder 메소드 for문 안에서 order.addOrderItem(orderItem)를 하고나서
order를 persist 할경우, 여러개의 orderItem이 같이 저장되기위해서 해당 Order 엔티티안에 orderItems 리스트객체를
cascade cascadeType.All선언해야하는데, OrderItem이 Item과 연관관계가 있어서 cascade all를 선언 안하는게 맞는지 궁금합니다.
만약 그게 맞다면 caseCade.All를 선언 안하면 order 객체을 persist 할 시점에 List<orderItem>들을 같이 저장이
안되는걸로 알고 있습니다. 그렇다면 order 엔티티 안에 createOrder 메소드로 반환값 받는 order에 있는 OrderItems 리스트
객체를 for문으로 돌려서 각각의 OrderItem객체를 persist 하여 order값도 같이 persist 시키는게 맞는건지 궁금합니다.
 

답변 2

·

답변을 작성해보세요.

0

안녕하세요. onil11님

앞어 우진님이 말씀하신 것 처럼 회원을 저장하면서 주문을 함께 저장하는 경우는 거의 없겠지요.

여기서는 예제의 다양성을 위해서 이런 부분을 포함해두었다고 이해하시면 됩니다.

감사합니다.

0

안녕하세요. 저도 잘 모르지만 개인적인 의견 적어봅니다.

1) 새로운 member를 추가하면서 주문도 함께 생성되는 경우가 과연 있을까 라는 생각이 듭니다.

보통 사이트에서 member를 먼저 생성해놓고, order 를 만들 때 생성이 되어 있는 member 를 가져다 쓰니깐요

remove는 고려 해볼 수도 있다고도 생각하지만, member를 삭제를 할 때, 모든 Order를 삭제하는 것은 비즈니스 상 맞지 않다고 느껴집니다.. 사이드 이펙트도 크지 않을까 라는 생각이...

2) 이것에 대해서는 말씀하신게 맞다고 생각합니다.

cascadeType.All 을 통해서 delivery, orderItem을 따로 persist를 하지 않더라도 Order만 persist 해도 전이 되어 함께 저장이 됩니다. ( 정확히는 All 속에 포함된 persist 옵션으로 인해)

cascadeType.All 을 쓰지 않았다면, delivery, orderItem을 먼저 모두 persist를 진행한 이후에 order persist를 진행해야 하는 것으로 알고 있습니다.

onil11님의 프로필

onil11

질문자

2022.06.17

1번같은 경우는 member가 지워지는경우 order도 같이 지워지는거에 대한건 다시 한번 생각해볼만하네요.

소중한 의견 감사드립니다.