개발자꿈나무
양방향 연관관계와 주인 - 기본개념 본문
★ 양방향 연관관계 매핑
- 데이터베이스 테이블은 외래 키 하나로 양쪽을 조회할 수 있으나, 객체는 정확하게 말하면 양방향의 개념이 없고 단방향이 2개이다.
⭐︎ 객체 연관관계 : 2개
- 회원 -> 팀 (Member.team)
- 팀 -> 회원 (Team.members)
⭐︎ 테이블 연관관계 : 1개
- 회원 <-> 팀
- 엔티티를 양방향 연관관계로 설정하면 객체의 참조는 둘인데 외래 키는 하나이므로 둘 사이에 차이가 발생한다.
- 따라서 어떤 객체가 관리하는 참조가 외래키와 매핑을 할지, 외래키를 관리해줄 객체를 정해야 한다 (주인 Owner)
★ 연관관계 주인
⭐︎ 양방향 매핑 규칙
- 객체의 두 관계 중 하나를 연관관계의 주인으로 지정
- 연관관계의 주인만이 외래키를 관리 (등록, 수정)
- 주인이 아닌 쪽은 읽기만 가능
- 주인은 mappedBy 속성 사용 X
- 주인이 아니면 mappedBy 속성으로 주인 지정
- Member.team을 주인으로 선택할 경우
- 엔티티와 테이블 연관관계 표를 다시 살펴보면, Member는 MEMBER 테이블과 매핑되면 MEMBER 테이블에는 TEAM_ID라는 외래키가 존재하므로, 자기 테이블에 있는 외래 키를 관리하면 된다. - Team.members를 주인으로 선택할 경우
- Team엔티티는 TEAM 테이블과 매핑되어 있으므로 물리적으로 전혀 다른 테이블의 외래 키를 관리해야 한다.
따라서, 주인을 정할 때는 외래 키가 있는 곳을 정하는 것이 편하다!
★ 양방향 매핑
- 연관관계의 주인인 Member 엔티티는 단방향 연관관계를 설정할 때와 마찬가지로 변경사항이 없지만 Team 엔티티는 연관관계 주인이 아니므로 mappedBy 속성을 이용해서 반대쪽 매핑의 필드이름을 값으로 설정해준다.
- 데이터베이스에 2명의 멤버가 있고 같은 TEAM1에 속해 있다고 가정할 때, 팀 -> 회원 객체 그래프 탐색이 가능한 모습을 확인할 수 있다.
728x90
'자바 > JPA' 카테고리의 다른 글
실전 예제 - 연관관계 매핑 시작 (0) | 2023.08.16 |
---|---|
양방향 매핑관계 - 주의, 정리 (0) | 2023.08.16 |
연관관계 매핑 - 단방향 연관관계 (0) | 2023.08.10 |
실전 예제 - 요구사항 분석 & 기본 매핑 (0) | 2023.08.08 |
기본키 매핑 (0) | 2023.08.07 |