| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- DispatcherServlet
- 스프링 부트
- Component
- zepettoworld.com
- git #gitlab #github
- layout #thymeleaf #화면분할
- autowired
- 스프링
- Bean
- spring
- 오토와이어드
- 1
- Today
- Total
기록과 정리
JPA 연관관계 다중성 ( N:1, 1:N, 1:1, N:M ) 본문
이 글은 김영한님의 자바 ORM 표준 JPA 프로그래밍 강의를 참고하였습니다.
www.inflearn.com/course/ORM-JPA-Basic/lecture/21695?tab=curriculum
자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런
JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다. 초급 웹 개발 프로그
www.inflearn.com
연관관계 다중성
종류
- 다대일 @ManyToOne
- 일대다 @OneToMany
- 일대일 @OneToOne
- 다대다 @ManyToMany

다대일 @ManyToOne [ N:1 ]
가장 많이 사용하며 일반적이 경우
@ManyToOne 및 @JoinColumn로 연관 관계 매핑

양방향일 경우


일대다 @OneToMany [ 1:N ]
단방향일 때 , 일(1)이 연관관계의 주인으로 설정 보통 다(N)에 FK가 존재한다.

객체와 테이블의 차이때문에 반대편 테이블 에서 FK를 관리하는 구조 , 연관관계 관리를 위해 UPDATE SQL 이 실행된다.

일대다 양방향 매핑은 공식적으로 존재하지 않지만 양방향처럼 사용하는 방법으로

위와 같이 설정도 가능하지만 되도록이면 다대일 양방향을 사용하자.
일대일 @OneToOne [ 1:1 ]
일대일은 거꾸로 해도 일대일 , 하지만 주테이블과 대상테이블을 정해주도록 하자. 왜? 외래키가 두 개 존재하기 떄문에

양방향일때는 ?



대상 테이블 기준으로 단방향 연관관계는 성립하지 않는다. 하지만 양방향 연관관계는 성립가능
- 주테이블 기준 단방향 연관관계 o
- 주테이블 기준 양방향 연관관계 o
- 대상 테이블 기준 단방향 연관관계 x
- 대상 테이블 기준 양방향 연관관계 o

주 테이블 외래키 기준으로 잡느냐 , 대상 테이블 외래키 기준으로 잡느냐는 객체 지향을 유지하느냐 , 테이블 구조에 대한 전통적인 데이터베이스형 개발 방식을 선호하느냐에 따른 선호의 차이인듯하다.
다대다 @ManyToMany [ N:M ]
단순 연결 방식


특이한건 주테이블에 @JoinTable(name="MEMBER_PRODUCT")인데 MEMBER_PRODUCT라는 중간 테이블을 생성하여 연결해주는 방식을 사용한다.

보기에는 간단해 보이지만.. MEMBER_PRODUCT에 매핑되어진 PK 또는 FK 외에는 인스턴스를 추가할 수 없다는 단점이 있다. 예를 들어 price나 time ( 실무에서 쓰기 부적합하다. 더욱 더 복잡해질 테이블로 인해 )
따라서 강의에서는 해결책으로 MEMBER_PRODUCT를 하나의 엔티티로 승격(?) 시키는것을 추천한다.



다대다에 대한 한계를 중간 테이블을 엔티티화 시키면서 극복이 가능하다. 하지만 어지간한 이유 아니면 사용하는것을 추천하지 않는다.
'IT > JPA' 카테고리의 다른 글
| 프록시와 즉시로딩, 지연로딩 (0) | 2021.02.23 |
|---|---|
| JPA 고급 매핑 전략 + @MappedSuperclass (0) | 2021.02.20 |
| JPA 연관관계 매핑 ( 단방향 , 양방향 ) (0) | 2021.02.16 |
| 엔티티 매핑 ( Entity Mapping ) (0) | 2021.02.15 |
| 영속성 컨텍스트 ( Entity Manager ) (0) | 2021.02.09 |