연결 – @ManyToMany

JPA는 DB 테이블 간의 매핑 관계에 대한 주석을 지원합니다.

이 페이지에서는 N:M 관계를 매핑하는 @ManyToMany 주석에 대해 알아봅니다.

법인

엔터티에서 N:M 관계는 다음과 같이 표현할 수 있습니다.


DB

실제 테이블의 N:M 관계를 표현할 수 없다

N:M 관계를 표현하기 위해 중간에 링크 테이블을 넣어 1:N 및 N:1 관계를 해결하여 표현

아래 이미지에서 N:M 관계인 주문과 품목의 관계는

조인 테이블인 OrderItem 테이블을 1:N, N:1 관계로 풀어 표현한 것을 볼 수 있다.


양방향 관계 적용

1. N:M 관계에서 M의 관계인 Orders to Item 참조 변수 추가


2. ManyToMany 관계 설정 및 mappedBy 속성 추가


@ManyToMany 관계를 사용하면 안 되는 이유

연결된 테이블은 단순히 연결되며 끝나지 않습니다.

@ManyToMany 관계를 설정할 때

JPA에서 다음 이미지와 같이 ORDER_ITEM 조인 테이블을 만듭니다.

ORDER와 ITEM 테이블을 ORDER_ITEM에 연결하기 위한 키 값인 ORDER_ID와 ITEM_ID 외에,

NUM_OF_ITEM(총 구매 수량) 및 TOTAL_PRICE(총 구매 수량) 추가 가능


데이터가 CRUD되면 쿼리가 복잡해지는 문제도 있습니다.

위와 같은 문제점으로 인해 실무에서 자주 사용되지 않으며 사용을 권장하지 않습니다.

@너무해 @ManyToOne 및 @OneToMany로 표현되어야 합니다.

ORDER_ITEM 테이블 ORDER와 ITEM 테이블을 연결하기 위한 핵심 값인 ORDER_ID와 ITEM_ID 외에,

NUM_OF_ITEM(총 구매수량)과 TOTAL_PRICE(총 구매금액)이 추가될 수 있기 때문에

아래와 같이 OrderItem 엔터티를 별도로 생성합니다.

주문 또는 항목 엔터티 @ManyToOne 및 @OneToMany로 표현