728x90

- 현재는 Member -> Team은 가능하지만 Team->Member는 안된다.
- 테이블은 외래키 하나로 양방향 매핑이 가능하다(조인만 된다면 방향이 상관없이 다된다)
- 객체의 연관관계는 다르다(방향이 있다)

- mappedBy로 어떤 것과 연관되어 있는지를 적어준다.
- 연관관계의 주인이 아님을 mappedby를 통해 표시

연관관계의 주인과 mappedBy
객체와 테이블이 관계를 맺는 차이
- 객체 연관관계 = 2개
- 회원 -> 팀 연관관계 1개(단방향)
- 팀 -> 회원 연관관계 1개(단방향)
- 테이블 연관관계 = 1개
- 회원 <-> 팀의 연관관계 1개(양방향)
- 외래 키값 하나로 모든 연관관계가 끝이 난다.
객체의 양방향 관계
- 객체의 양방향 관계는 사실 양방향 관계가 아니라 서로 다른 단 방향 관계 2개다.
- 객체를 양방향으로 참조하려면 단방향 연관관계를 2개 만들어야 한다.
테이블의 양방향 연관관계
- 테이블은 외래키 하나로 두 테이블의 연관관계를 관리
- MEMBER.TEAM_ID 외래 키 하나로 양방향 연관관계 가짐 (양쪽으로 조인할 수 있다.)
둘 중 하나로 외래 키를 관리해야 한다.

- Member의 team값을 바꿔야 되는 건지, Team의 members를 바꿔야 되는 건지 헷갈린다.
- 둘 중 하나를 주인을 정해야 된다 = 연관관계의 주인
연관관계의 주인
양방향 매핑 규칙
- 객체의 두 관계 중 하나를 연관관계의 주인으로 지정
- 연관관계의 주인만이 외래 키를 관리(등록, 수정)
- 주인이 아닌 쪽은 읽기만 가능
- 주인은 mappedBy 속성 사용 X
- 주인이 아니면 mappedBy 속성으로 주인 지정
누구를 주인으로?

- 외래 키가 있는 있는 곳을 주인으로 정해라
- Team의 members를 연관관계의 주인으로 정한다면 Team테이블을 변경하면 Member테이블이 변경된다.
- DB의 입장에서 보면 많은 쪽에 외래키가 있다
- 따라서, 외래키가 있는 사 쪽이 연관관계의 주인으로 설정하는 것이 좋다.
- 단, 연관관계의 주인이라고, 비즈니스적으로 우위에 있는 것은 아니다(바퀴-차를 예를 들면 다인 바퀴가 주인이지만 비즈니스적으로는 차가 더 우위임으로 연관관계 주인인 것이랑 비즈니스는 아무런 연관이 없다)
728x90
'자바 ORM 표준 JPA 프로그래밍(인프런)' 카테고리의 다른 글
| Ch05. 연관관계 매핑 기초 - 실전 예제(연관관계 매핑 시작) (0) | 2021.12.12 |
|---|---|
| Ch05. 연관관계 매핑 기초 - 양방향 연관관계와 연관관계의 주인(주의점) (0) | 2021.12.12 |
| Ch05. 연관관계 매핑 기초 - 단방향 연관관계 (0) | 2021.12.12 |
| Ch04. 엔티티 매핑 - 실전 예제(요구사항 분석과 기본 매핑) (0) | 2021.12.10 |
| Ch04. 엔티티 매핑 - 기본 키 매핑 (0) | 2021.12.10 |