[SpringBoot] 연관관계 매핑 기초

·2023년 9월 9일

연관관계의 필요성

테이블은 외래 키로 조인을 사용해서 연관된 테이블을 찾는 반면, 객체는 참조를 사용해 연관된 객체를 찾기 때문에 객체를 테이블에 맞추어 데이터 중심으로 모델링 하게되면 협력 관계를 만들 수 없다.

예제 시나리오

  • 회원과 팀이 있다.
  • 회원은 하나의 팀에만 소속될 수 있다.
  • 회원과 팀은 다대일 관계다.



ORM 매핑

양방향 연관관계와 연관관계의 주인

양방향 연관관계는 단방향과 다르게 객체 연관 관계는 2개인데 테이블 연관관계는 하나라서 객체 그래프를 탐색을 할때 어떤것을 참조를 해야할지 문제가 생기게 된다. 여기서 나온 개념이 연관관계의 주인이다.

객체의 양방향 관계는 사실 양방향 관계가 아니라 서로 다른 단방향 관계 2개인 것이다. 객체를 양방향으로 참조하려면 단방향 연관관계를 2개 만들어야 한다. 반면에 테이블은 외래 키 하나로 두 테이블의 연관관계를 관리한다.여기서 오는 차이로 인해 양방향의 두 참조중 하나로 외래 키를 관리해야해서 주인을 정해야 한다.

연관관계의 주인(Owner)

양방향 매핑 규칙

  • 객체의 두 관계중 하나를 연관관계의 주인으로 지정
  • 연관관계의 주인만이 외래 키를 관리(등록, 수정)
  • 주인이 아닌쪽은 읽기만 가능
  • 주인은 mappedBy 속성 사용X
  • 주인이 아니면 mappedBy 속성으로 주인 지정

결론: 외래 키가 있는 곳을 주인으로 정해라!! —> 일대다중 외래키가 있는곳이 다 없는곳이 1, 다 쪽이 주인

profile
고민0

0개의 댓글