참고 블로그
다대다 [N:M]
- 관계형 데이터베이스는 정규화된 테이블 2개로 다대다 관계를 표현할 수 없다.
- 연결 테이블 (조인 테이블)을 추가해서 일대다, 다대일 관계로 풀어내야한다.
2022.09.14 - [DB/RDBMS] - [RDBMS] 관계형 데이터 모델링 1
- 객체는 컬렉션을 사용해서 객체 2개로 다대다 관계가 가능하다.
- ORM 입장에서는 테이블은 안되고, 객체는 안되는 것을 지원
- 따라서, 아래의 그림에서와 같이 객체의 다대다 관계와
- 테이블에서 다대다 관계를 일대다 다대일 관계로 관계호 풀어낸 것 두개의 차이를 연결해준다
- JPA @ManyToMany 어노테이션 사용 / @JoinTable로 연결 테이블을 지정
다대다 매핑의 한계
- 편리해 보이지만 실무에서 사용하면 안됨.
- 개발하다 보면, 연결 테이블이 단순히 연결만 하고 끝나지 않는다. 조인 테이블 자체에 주문시간, 수량 같은 추가 데이터가 많이 들어갈 수 있다.
- 하지만, 매핑 정보만 넣는 것이 가능하고, 추가 정보를 넣는 것 자체가 불가능하다.
- 그리고 중간 테이블이 숨겨져 있기 때문에 예상하지 못하는 쿼리들이 나간다.
- 이런 문제점들 때문에 실무에서는 안쓴다고..
다대다 한계 극복
- 연결 테이블을 엔티티로 승격시킨다.
- 그리고 @ManyToMany를 각각 일대다, 다대일로 관꼐를 맺어준다.
- @ManyToOne 다대일 관계 두개로 풀어낸다
- JPA가 만들어주는 숨겨진 매핑테이블의 존재를 바깥으로 꺼내는 것
'🌿SPRING > 🍀공부 [SPRING]' 카테고리의 다른 글
[SPRING][JPA] native query 활용하기 (0) | 2022.09.29 |
---|---|
[SPRING][JPA] @Query 활용하기 (0) | 2022.09.29 |
[SPRING] Service 와 ServiceImpl (0) | 2022.09.14 |
[SPIRING] [MVC] @EnableWebMvc 어노테이션 (0) | 2022.09.07 |
[SPRING] Frontend와 협업 ! - CORS 원리 / 설정 (22.10.22 수정) (0) | 2022.09.07 |