🌿SPRING/🍀공부 [SPRING]

[SPRING][JPA] 다대다 매핑 N:M

디카페인라떼 2022. 9. 26. 23:56

참고 블로그

다대다 [N:M]
  • 관계형 데이터베이스는 정규화된 테이블 2개로 다대다 관계를 표현할 수 없다.
  • 연결 테이블 (조인 테이블)을 추가해서 일대다, 다대일 관계로 풀어내야한다.

2022.09.14 - [DB/RDBMS] - [RDBMS] 관계형 데이터 모델링 1

 

[RDBMS] 관계형 데이터 모델링 1

더보기 - 참고한 강의 더보기 참고한 강의 https://opentutorials.org/course/3883 관계형 데이터 모델링 - 생활코딩 수업소개 관계형 데이터베이스의 테이블을 설계하는 방법을 알려드리는 수업입니다. 이

wearegolden.tistory.com

  • 객체는 컬렉션을 사용해서 객체 2개로 다대다 관계가 가능하다.
    • ORM 입장에서는 테이블은 안되고, 객체는 안되는 것을 지원
    • 따라서, 아래의 그림에서와 같이 객체의 다대다 관계와 
    • 테이블에서 다대다 관계를 일대다 다대일 관계로 관계호 풀어낸 것 두개의 차이를 연결해준다
    • JPA @ManyToMany 어노테이션 사용 / @JoinTable로 연결 테이블을 지정

 

다대다 매핑의 한계
  • 편리해 보이지만 실무에서 사용하면 안됨.
  • 개발하다 보면, 연결 테이블이 단순히 연결만 하고 끝나지 않는다. 조인 테이블 자체에 주문시간, 수량 같은 추가 데이터가 많이 들어갈 수 있다.
  • 하지만, 매핑 정보만 넣는 것이 가능하고, 추가 정보를 넣는 것 자체가 불가능하다.
  • 그리고 중간 테이블이 숨겨져 있기 때문에 예상하지 못하는 쿼리들이 나간다.
  • 이런 문제점들 때문에 실무에서는 안쓴다고..
다대다 한계 극복
  • 연결 테이블을 엔티티로 승격시킨다.
  • 그리고 @ManyToMany를 각각 일대다, 다대일로 관꼐를 맺어준다.
    • @ManyToOne 다대일 관계 두개로 풀어낸다
  • JPA가 만들어주는 숨겨진 매핑테이블의 존재를 바깥으로 꺼내는 것