일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- Chat GPT
- Git
- JPA
- 서버 배포
- 자바
- 저장소 복제
- Json 객체
- 두수의 합 자바
- swap 메모리
- jar빌드
- springboot
- 프로그래머스
- 비밀번호 재설정 API
- 스프링부트 OpenAI API
- HttpServletResponse
- 넘파이
- MVC
- MySQL
- 값 타입
- api 개발
- 저장소 이전
- 우분투
- github 복제
- git 충돌 해결
- JPQL
- 스프링 이메일 전송
- Servlet
- 페이징 정렬
- 파이썬
- JDBC
- Today
- Total
현의 개발 블로그
[다양한 연관관계 매핑] 다대다 본문
앞에서 일대일 연관관계를 살펴보았다.
다양한 연관관계 매핑(3) - 일대일
앞에서 일대다 연관관계를 살펴보았다. 다양한 연관관계 매핑(2) - 일대다 앞에서 다대일 연관관계를 살펴보았다. 다양한 연관관계 매핑(1) - 다대일 연관관계 매핑 시 고려사항 3가지 1. 다중성
hyun-keepdeving.tistory.com
이번 글에서는 다대다 연관관계를 알아볼 것이다.
다대다
관계형 데이터베이스는 정규화된 테이블 2개로 다대다 관계를 표현할 수 없다.
중간에 연결 테이블을 추가해서 일대다, 다대일 관계로 풀어내야 한다.
이와 달리, 객체는 컬렉션을 사용해서 객체 2개로 다대다 관계가 가능하다.
Member도 productList를 가질 수 있고, Product도 memberList를 가질 수 있다.
다대다 연관관계 매핑
@ManyToMany를 사용하며, @JoinTable 로 연결 테이블을 지정한다.
다대다 매핑은 단방향, 양방향 모두 가능하다.
단방향
Member에 @JoinTable로 연결 테이블 MEMBER_PRODUCT를 명시하였다.
//Member.java
@ManyToMany
@JoinTable(name = "MEMBER_PRODUCT")
private List<Product> products = new ArrayList<>();
아래와 같은 ddl문이 생성된다.
양방향
//Member.java
@ManyToMany
@JoinTable(name = "MEMBER_PRODUCT")
private List<Product> products = new ArrayList<>();
//Product.java
@ManyToMany(mappedBy = "products")
private List<Member> members = new ArrayList<>();
다대다 연관관계 한계
연결 테이블은 단순히 연결만 하고 끝나지 않는다.
실무에서는 주문 시간, 수량 같은 데이터가 들어올 수 있다.
하지만, 다대다 연관관계는 중간 테이블에 매핑 정보만 들어가고, 추가 컬럼이 들어갈 수 없다.
다대다 연관관계 한계 극복
연결 테이블을 엔티티로 승격한다.
다대다 관계를 다대일, 일대다 관계로 풀어낸다.
//MemberProduct.java 엔티티명을 Orders로 변경할 수도 있음
@Id @GeneratedValue
private Long id;
@ManyToOne
@JoinColumn(name = "MEMBER_ID")
private Member member;
@ManyToOne
@JoinColumn(name = "PRODUCT_ID")
private Product product;
//Member.java
@OneToMany(mappedBy = "member")
private MemberProduct memberProducts = new ArrayList<>():
//Product.java
@OneToMany(mappedBy = "product")
private List <MemberProduct> memberProducts = new ArrayList<>();
Reference
자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의
초급자를 위해 준비한 [웹 개발, 백엔드] 강의입니다. JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자
www.inflearn.com
'스프링부트 이론 > JPA' 카테고리의 다른 글
[고급 매핑] 상속 관계 매핑 (0) | 2023.05.27 |
---|---|
[다양한 연관관계 매핑] 실전 예제 (0) | 2023.05.23 |
[다양한 연관관계 매핑] 일대일 (0) | 2023.05.23 |
[다양한 연관관계 매핑] 일대다 (0) | 2023.05.23 |
[다양한 연관관계 매핑] 다대일 (0) | 2023.05.23 |