inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

212

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들을 관리하기 위한 연관관계 메서드가 필요한 것입니다.

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

섹션2, 대화&세션관리 수업 자료 누락

0

10

1

HelloSpringApplication.java 클래스 실행 오류

0

15

1

build 시 에러 해결방법 공유(docker.desktop 업데이트 -> 의존성 버전 수정)

0

37

2

네이버 API | '검색 - 책' API 제공 중단

0

47

2

Part 2 듣기전 복습하던 중, 아키텍처에 관한 질문이 있습니다.

0

49

2

장치 의존성과 CSR

0

36

1

테스트는 인터페이스를 대상으로 만드는것에 대해 궁금한 점이 있습니다.

0

32

1

[영한님]Spring Boot 및 프로젝트 생성

0

60

2

JPA 엔티티로 만들었다고 기술종속이 아닌지에 대한 질문

0

57

3

강의 요청 문의

0

40

2

클로드코드 명령어-대화&세션관리 수업 자료

0

43

1

PlatformTransactionManager, ResourcelessTransactionManager 질문

1

68

2

자료 한번에 다운받기

0

33

1

스프링 빈 등록 방법 2가지 다 알아야하는 이유

0

59

1

mybatis 를 이용한 crud에서 insert에서 resultType='long" 이라고 하셨는데요,

0

28

1

설계 트레이드 오프 링크 접속 안됨

0

85

2

테스트 질문, 어떤것을 사용할것인것에 대해서

0

46

1

깃허브주소 궁금합니다.

0

36

2

mariaDB 설정

0

33

1

섹션4 퀴즈 오타있어요.

0

48

1

AWS 배포 성능테스트

0

76

2

퀴즈가 안열려요

0

76

2

7강 보고 있는데요.. 글자가 너무 작아요

0

44

1

트래잭션 전파 기본- 에 대한 개념 질문? 이렇게 생각해도 맞나요?

0

47

1