Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- django
- APPEND_SLASH = FALSE
- django 웹 페이지
- 2643 java
- java di
- 18233 러버덕
- 14711 java
- apache pythonpath
- 1188 음식 평론가
- django settings.py
- 원격 연결 포트 포워딩
- 공유기 원격 설정
- 2661 java
- The requested operation has failed!
- 1188 java
- django httpd error
- windows apache wsgi 에러
- windows 원격 연결 설정
- Problems occurred while performing provisioning operation
- 2661 좋은 수열
- django windows 배포 에러
- 14711 타일 뒤집기
- 18233 비트마스킹
- django apache deploy error
- django The requested operation has failed!
- 2961 도영이가 만든 맛있는 음식
- 2643 색종이 올려 놓기
- 18233 java
- django 프로젝트 시작
- 2961 java
Archives
라이브러리는 도서관 아닌가요
JPA 다대다를 다대일, 일대다로 풀어야 하는 이유 본문
개념상 두 엔티티는 다대다로 묶일 수 있다.
다만 관계형 데이터베이스에서는 테이블 두 개로 다대다를 표현할 수 없다.
따라서 두 엔티티에 대한 테이블 관계를 일대다, 다대일 테이블 관계로 풀어내야 한다.
결국 두 테이블 사이에 연결 테이블이 하나 더 생겨 3개가 된다.
이러한 보이지 않는 매핑과 생성을 JPA의 hibernate가 알아서 해준다.
그럼 왜 JPA의 다대다를 실무에서 쓰지 말라고 할까?
자동으로 생성되는 연결 테이블에 사실상 데이터를 추가하는 것이 불가능하기 때문이다.
예를 들어 이미 생성된 연결 테이블에
주문 시간, 주문 수량과 같은 데이터를 추가하라는 요청이 들어왔을 때 해결할 수 없다.
또한 두 테이블과 연결 테이블 간에 오고 가는 쿼리를 파악해야 하는 불편함까지 있다.
그래서 쓰지 않는다.
그럼 해결책은?
보이지 않았던 연결 테이블을 엔티티로 구현하는 것이다.
JPA가 자동 생성해주는 다대다 용도의 테이블에 의존하지 않게끔 한다.
따라서 미리 두 엔티티 간의 관계를 파악하고 설계를 한다.
JPA가 했듯이 다대다를 다대일, 일대다로 풀어낸다.
'Java > JPA' 카테고리의 다른 글
양방향 연결 관계 mappedBy 속성 (0) | 2022.02.08 |
---|---|
JPA @EmbeddedId 사용할 때 복합키는 equals(), hashCode()를 구현 (0) | 2022.01.26 |
Comments