연관관계 주인과 MappedBy

Rudy·2023년 10월 11일
0

MappedBy

  • 객체와 테이블간에 연관관계를 맺는 차이를 이해해야 한다

객체 연관관계 = 2개 이다
회원 -> 팀 연관관계 1개(단방향)
팀 -> 회원 연관관계 1개(단방향)
객체는 양쪽에 참조 값이 필요하다
그래서 객체의 양방향 관계는 양방향 관계가 아니라 서로 다른 단방향 2개라고 할수있다

테이블 연관관계 = 1개
회원 <-> 팀의 연관관계 1개(양뱡향)
외래키 하나로 양쪽에 관계와 방향을 정리 할수 있다 (양쪽으로 조인도 가능)

사용이유
테이블 연관관계는 위에서 말한 예시 처럼 외래키 하나로 연관관계를 맺을수 있다
이러다 보니 양쪽 테이블에 어떤 외래키를 선택해야 할지 고민에 빠진다. 물론 단방향 일때는 문제는 없다 그래서 우리는 연관관계의 주인과 규칙을 알아야 한다

양방향 매핑 규칙

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

그러면 우리는 누구를 주인으로 선택해야 할까?

  • 외래키가 있는 곳을 주인으로 정한다
  • Member , Team 이 두 테이블에 관계는 Many to One 여러 사람은 하나에 팀에 속한다
    이럴때 우리는 Many 쪽 Member를 주인으로 선택하고 Team MappedBy 즉 가짜 맵핑을 한다
    주인을 선택 하는건 우리에 자유이다 강요가 아니다 Member 선택하는 이유는 Team 주인으로 선택하고 Team 테이블에서 Member 값을 바꾸면 다른 테이블에 쿼리가 요청 결과를 확인해야 한다

주인을 선택하는 일은 우리에 자유이다 하지만 N : 1 일때 N을 주인으로 선택하는 것을 추천한다

주의사항
항상 연관관계 주인에게 값을 입력하다

  • 양방향 연관관계 일때 순수 객체 상태를 고려해서 항상 양쪽에 값을 설정하자
  • 연관관계 편의 메소드를 생성하자
  • 양방향 매핑시에 무한 루프를 조심하자
profile
주니어 개발자

0개의 댓글