Close
Close full mode
logo만렙 개발자 키우기

(4) 연관관계 주인

Git RepositoryEdit on Github
Last update: a year ago by nowwaterReading time: 2 min

엄밀히 얘기하면 객체에는 양방향 연관관계라는 것이 없다.

서로 다른 단방향 연관관계 2개를 애플리케이션 로직으로 잘 묶어서 양방향인 것처럼 보이게 할 뿐이다.

반면, 테이블은 외래 키 하나로 두 테이블의 연관관계를 관리한다.

이렇게 엔티티를 양방향 연관관계로 설정하면 객체의 참조는 둘인데 외래 키는 하나다.

따라서 두 객체 연관관계 중 하나를 정해서 테이블의 외래키를 관리해야 한다.

이것을 연관관계의 주인 이라고 한다.

5.4.1 양방향 매핑의 규칙: 연관관계의 주인

  • 연관관계의 주인만이 외래키를 관리(등록, 수정, 삭제) 할 수 있고, 데이터베이스 연관관계와 매핑된다.
  • 주인이 아닌 쪽은 읽기만 할 수 있다.

연관관계의 주인을 정한다는 것 = 외래 키 관리자를 선택하는 것

mappedBy 속성

주인은 mappedBy 속성을 사용하지 않는다.

주인이 아니면 mappedBy 속성 을 사용해서 속성의 값으로 연관관계의 주인을 지정


5.4.2 연관관계의 주인은 외래 키가 있는 곳

  • 연관관계의 주인은 테이블에 외래 키가 있는 곳으로 정해야 한다.
  • Team 엔티티는 mappedBy를 통해 주인이 아님을 설정
class Team {
@OneToMany(mappedBy = "team") // 연관관계 주인인 Member.team
private List<Member> members = new ArrayList<Member>();
}

중요

  • 연관관계의 주인만 데이터베이스 연관관계와 매핑, 외래 키를 관리.
  • 주인이 아닌 반대편은 읽기만 가능, 외래 키를 변경하지 못한다!!
  • 항상 "다(N)" 쪽이 외래 키를 가진다.
  • @ManyToOne은 항상 연관관계의 주인이 된다. => mappedBy 속성이 없다.
🚀 JPA — Previous
(3) 양방향 연관관계
Next — 🚀 JPA
(5) 양방향 연관관계 저장