강의 내용에서 이해안되는 부분 질문드립니다.

24.04.26 00:22 작성 조회수 36

0

package jpabook.jpashop.domain;

import jakarta.persistence.*;
import jdk.jshell.Snippet;
import lombok.Getter;
import lombok.Setter;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@Entity
@Table(name = "orders")
@Getter @Setter
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) 

    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);
    }


    public void addOrderItem(OrderItem orderItem) {
        orderItems.add(orderItem);
        orderItem.setOrder(this);
    }


    public void setDelivery(Delivery delivery) {
        this.delivery = delivery;
        delivery.setOrder(this);
    }

 

 //==연관관계 메서드==//
    public void setMember(Member member) {
        this.member = member;
        member.getOrders().add(this);
    }


    public void addOrderItem(OrderItem orderItem) {
        orderItems.add(orderItem);
        orderItem.setOrder(this);
    }


    public void setDelivery(Delivery delivery) {
        this.delivery = delivery;
        delivery.setOrder(this);
    }

이 연관관계 메서드 부분이 이해가 안되어서 질문드립니다.

  1. setMember 메소드에서 member.getOrders().add(this); 이 부분이 전혀 이해가 안되는데 설명 부탁드립니다.

 

  1. addOrderItem 메소드에서 orderItems.add(orderItem); 와 orderItem.setOrder(this); 이 부분이 전혀 이해가 안되는데 설명 부탁드립니다.

 

  1. setDelivery 메소드에서 delivery.setOrder(this); 이 부분이 전혀 이해가 안되는데 설명 부탁드립니다.

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.04.27

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

whdk333님, JPA에서의 연관관계 메서드에 대해 질문주셨군요. 객체 간의 연관관계를 효율적으로 관리하기 위한 방법에 대해 구체적으로 설명드리겠습니다.

  1. setMember 메소드에서 member.getOrders().add(this); 이 부분은 ‘양방향 연관관계’를 설정할 때 사용됩니다. 여기서 this는 현재 Order 인스턴스를 나타냅니다. 즉, 어떤 Order 인스턴스가 특정 Member에 속하게 되면, 해당 Memberorders 리스트에도 이 Order 인스턴스를 추가함으로써 양쪽 모두에 연관관계가 설정되었음을 반영하는 것입니다.

  2. addOrderItem 메소드의 경우, orderItems.add(orderItem);orderItem.setOrder(this); 부분에서는 OrderOrderItem 사이의 양방향 연관관계를 설정합니다. orderItems.add(orderItem);Order 인스턴스의 orderItems 리스트에 주문 항목인 OrderItem을 추가합니다. orderItem.setOrder(this);를 통해 OrderItem의 입장에서도 이를 주문한 Order 인스턴스를 자신의 소속으로 지정하여 양쪽 모두에서 서로를 참조할 수 있도록 합니다.

  3. setDelivery 메소드에서 delivery.setOrder(this); 부분은 DeliveryOrder 사이의 양방향 연관관계를 설정하는 과정에서 사용됩니다. Delivery 인스턴스의 order 필드에 현재 Order 인스턴스(this)를 설정함으로써, Delivery 입장에서는 자신이 어떤 Order에 속하는지 알 수 있게 되고, Order 입장에서도 Delivery를 통해 배송 정보를 알 수 있게 됩니다.

각 메소드는 연관된 엔티티 간의 관계를 양방향으로 설정하는 데 필수적이며, 이를 통해 데이터의 일관성과 코드의 가독성을 유지할 수 있습니다.