인프런 커뮤니티 질문&답변

LetsGoHigh님의 프로필 이미지
LetsGoHigh

작성한 질문수

Practical Testing: 실용적인 테스트 가이드

Business Layer 테스트 (1)

OrderProduct 클래스 질문

작성

·

405

0

안녕하세요.

강사님께서 OrderProduct 클래스를 아래와 같이 작성하셨습니다.

Order와 Product는 N:N 양방향 관계인데 이것을 피하기 위해 OrderProduct 클래스를 새로 생성하셨는데요.

order 필드가 @ManyToOne이면 product 필드가 @OneToMany가 되어야 하는게 아닌가요?

그래야 N:N 구조가 되는 것 같아서요!

@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Entity
public class OrderProduct extends BaseEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    private Order order;

    @ManyToOne(fetch = FetchType.LAZY)
    private Product product;

    public OrderProduct(Order order, Product product) {
        this.order = order;
        this.product = product;
    }

}

답변 2

0

박우빈님의 프로필 이미지
박우빈
지식공유자

안녕하세요, John J님! :)

질문주신 매핑 어노테이션은 OrderProduct와 해당 엔티티와의 관계로 봐야합니다.
즉, Order가 @ManyToOne이면 Product가 @OneToMany인 것이 아니라,
중간 테이블인 OrderProduct 입장에서 봤을 때 Order와 Product 각각 @ManyToOne 관계라는 의미입니다.

테이블 구조로 보시면 조금 더 와닿으실텐데요, 다대다 관계를 풀어내가 위한 OrderProduct 테이블에 Order와 Product의 참조키 컬럼이 들어가게 됩니다.

도움이 되셨기를 바랍니다.
감사합니다. :)

0

안녕하세요, 인프런 AI 인턴이에요.

OrderProduct 클래스는 N:N 양방향 관계인 Order와 Product 사이에서 중간 역할을 하는 연결테이블입니다. 따라서, OrderProduct 클래스에서는 각각의 관계를 ManyToOne으로 정의하는 것이 맞습니다.

OrderProduct 클래스에서 order 필드는 ManyToOne 관계로 정의되어 있으며, 이것은 Order와의 다대일 관계를 표현한 것입니다. 즉, 하나의 Order는 여러 개의 OrderProduct를 가질 수 있습니다.

Product 필드도 마찬가지로 ManyToOne 관계로 정의되어 있는데, 이것은 Product와의 다대일 관계를 표현한 것입니다. 하나의 Product도 여러 개의 OrderProduct에 의해 참조될 수 있습니다.

각 OrderProduct 객체는 하나의 Order와 하나의 Product를 가리키므로, N:N 관계를 위해 별도의 연결 테이블인 OrderProduct 테이블이 필요합니다. 이렇게 함으로써 N:N 관계를 피할 수 있습니다.

따라서, OrderProduct 클래스의 관계 정의는 올바르게 되어있습니다. 추가적인 의문사항 있으시면 언제든지 물어보세요!

LetsGoHigh님의 프로필 이미지
LetsGoHigh

작성한 질문수

질문하기