개발자꿈나무

양방향 연관관계와 주인 - 기본개념 본문

자바/JPA

양방향 연관관계와 주인 - 기본개념

망재이 2023. 8. 15. 18:04

★ 양방향 연관관계 매핑

양방향 객체 연관관계
테이블 연관관계

- 데이터베이스 테이블은 외래 키 하나로 양쪽을 조회할 수 있으나, 객체는 정확하게 말하면 양방향의 개념이 없고 단방향이 2개이다.

 

⭐︎ 객체 연관관계 : 2개

  • 회원 -> 팀 (Member.team)
  • 팀 -> 회원 (Team.members)

⭐︎ 테이블 연관관계 : 1개

  • 회원 <-> 팀

- 엔티티를 양방향 연관관계로 설정하면 객체의 참조는 둘인데 외래 키는 하나이므로 둘 사이에 차이가 발생한다.

- 따라서 어떤 객체가 관리하는 참조가 외래키와 매핑을 할지, 외래키를 관리해줄 객체를 정해야 한다 (주인 Owner)

 

 

★ 연관관계 주인

 

⭐︎ 양방향 매핑 규칙

  • 객체의 두 관계 중 하나를 연관관계의 주인으로 지정
  • 연관관계의 주인만이 외래키를 관리 (등록, 수정)
  • 주인이 아닌 쪽은 읽기만 가능
  • 주인은 mappedBy 속성 사용 X
  • 주인이 아니면 mappedBy 속성으로 주인 지정
  • Member.team을 주인으로 선택할 경우
    - 엔티티와 테이블 연관관계 표를 다시 살펴보면, Member는 MEMBER 테이블과 매핑되면 MEMBER 테이블에는 TEAM_ID라는 외래키가 존재하므로, 자기 테이블에 있는 외래 키를 관리하면 된다.
  • Team.members를 주인으로 선택할 경우
    - Team엔티티는 TEAM 테이블과 매핑되어 있으므로 물리적으로 전혀 다른 테이블의 외래 키를 관리해야 한다.

따라서, 주인을 정할 때는 외래 키가 있는 곳을 정하는 것이 편하다!

 

 

★ 양방향 매핑

Member 엔티티
Team 엔티티

- 연관관계의 주인인 Member 엔티티는 단방향 연관관계를 설정할 때와 마찬가지로 변경사항이 없지만 Team 엔티티는 연관관계 주인이 아니므로 mappedBy 속성을 이용해서 반대쪽 매핑의 필드이름을 값으로 설정해준다.

 

- 데이터베이스에 2명의 멤버가 있고 같은 TEAM1에 속해 있다고 가정할 때, 팀 -> 회원 객체 그래프 탐색이 가능한 모습을 확인할 수 있다.

728x90