inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

연관관계 메서드에 대해 질문드립니다.

203

whdk333

작성한 질문수 31

0

@Entity
@Table(name = "orders")
@Getter @Setter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Order {

    @Id @GeneratedValue
    @Column(name = "order_id")
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "member_id")
    private Member member;

    @OneToMany(mappedBy = "order", cascade = CascadeType.ALL)
    private List<OrderItem> orderItems = new ArrayList<>();

    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinColumn(name = "delivery_id")
    private Delivery delivery; //배송정보

    private LocalDateTime orderDate; //주문시간

    @Enumerated(EnumType.STRING)
    private OrderStatus status; //주문상태 [ORDER, CANCEL]




//==연관관계 메서드==//
public void setMember(Member member) {
    this.member = member;
    member.getOrders().add(this); // Member 엔티티 부분 : private List<Order> orders = new ArrayList<>();
}


public void addOrderItem(OrderItem orderItem) {
    orderItems.add(orderItem); // OrderItem 엔티티 부분 : private Order order;
    orderItem.setOrder(this);
}


public void setDelivery(Delivery delivery) {
    this.delivery = delivery; // Delibery 엔티티 부분 : private Order order;
    delivery.setOrder(this);
}

 

  1. member.getOrders().add(this)

     

    -> addOrderItem과 setDelivery에서는 setOrder(this)로 연관관계를 설정해줬는데, 왜 setMember 메소드에서만 getOrders().add(this)로 연관관계를 설정한 것인가요? Member 엔티티의 orders메소드가 List라 그런 것인가요?

     

     

  2. setMember에서는 같은 List임에도 불구하고 this.member = member라고 했는데, 왜 여기서는 add(orderItem)으로 연관관계를 설정한 것인가요? orderItems가 List라서 그런 것인가요?

 

 

 

 

스프링 spring 연관관계메서드 김영한강사님 양방향연관관계

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

whdk333님의 질문에 대해 답변드리겠습니다.

  1. setMember 메소드에서 getOrders().add(this)로 연관관계를 설정한 이유는 Order 엔티티와 Member 엔티티 간의 양방향 연관 관계를 맺기 위함입니다. Member 엔티티의 orders 필드가 List<Order> 타입으로 여러 Order 엔티티를 참조할 수 있기 때문에, Order 엔티티를 생성하고 Member 엔티티에 연결할 때 Memberorders 리스트에 해당 Order 엔티티를 추가함으로써 양방향 매핑을 완성합니다. 이 경우 Member 엔티티 내부의 List<Order>Order 인스턴스를 추가해야 하므로 getOrders().add(this)를 사용합니다.

  2. setMember 메소드와 addOrderItem 메소드의 차이는 연관관계의 주체가 무엇이냐에 따라 달라집니다. setMember에서 this.member = member와 같이 설정하는 것은 Order 엔티티 입장에서 Member 엔티티를 설정하는 것입니다. 한편, addOrderItem에서 orderItems.add(orderItem)을 호출하는 이유는 Order 엔티티가 여러 개의 OrderItem 엔티티를 갖는 컬렉션을 관리하기 때문입니다. 여기서 OrderItem 엔티티 각각에 대해 역방향으로 Order 엔티티를 설정하기 위해 orderItem.setOrder(this)를 호출합니다. 즉, Order 엔티티와 OrderItem 엔티티는 1:N 관계에 있으며, Order 엔티티에 속한 OrderItem들을 관리하기 위한 연관관계 메서드가 필요한 것입니다.

어떤 연관관계 메서드를 사용하느냐는 해당 엔티티 간의 관계와 개념적인 모델링에 따라 달라집니다. 연관관계 설정 시 어떤 엔티티가 컨트롤하는 쪽인지, 어떤 방식으로 데이터가 연결되는지를 기준으로 메서드를 구현하게 됩니다.

changeTeam 메서드 질문

0

2

1

"컴파일 시점에 없는 값을 어떻게 참조할 것인가?" 섹션

1

18

2

테스트 관련 질문!

0

22

2

handleBindException 의 기대의도가 방향이 맞는지 궁금합니다.

0

24

2

SpringBoot 4.0.6 버전에서 PackageLogTracePostProcessor exception

0

30

2

인텔리제이 오류

0

34

1

프로젝트 의존 관계

0

33

2

application.properties가 적용되지 않아요

1

43

3

새 프로젝트 속 제너레이터에 SpringBoot가 없습니다.

0

31

2

섹션3. 11 회원객체 다이어그램

0

30

1

OCP, DIP과 @Qualifier 어노테이션에 대해서 질문합니다.

0

26

1

강의 연장 요청

0

33

2

설정 정보 없이 임베디드 데이터베이스 생성

0

27

1

형 이번에 낸 책이랑 강의 내용에 차이가 있어?

1

56

1

형 나 몰래 책내면 모를 줄 알고?

2

49

2

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

0

28

1

N+1 관련해서 질문있습니다.

0

53

3

강의 중복 확인 요청

0

33

1

중복내용 제보?!

1

54

2

여러 파드 환경에서 단일 실행 보장 방식

0

34

2

패키지 구분에 대해 궁금한게 있습니다

0

36

2

코드 자료

0

64

2

조회속도 개선에서 더 개선하는 방법이 궁금합니다.

0

50

2

servlet과 container에 대한 질문입니다

0

38

1