[JPA]연관관계 매핑 기초

Jimin·2023년 1월 2일
0

JPA

목록 보기
2/6
  • 객체아 테이블 연관관계의 차이를 이해
  • 객체의 참조와 테이블의 외래 키를 매핑

객체를 테이블에 맞춰 모델링

  • 외래 키 식별자를 직접 다룸
  • 식별자로 다시 조회 -> 객체 지향적인 방법은 아님

객체 지향 모델링

  • 객체 연관관계 사용

  • Member -> @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "TEAM_ID")


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

양방향 매핑

  • 테이블 연관관계는 외래키로 양방향이 다 존재함
  • 사실상 테이블 연관관계는 방향이라는 개념이 없음, 외래키만 있으면 양쪽을 다 알 수 있음
  • Team -> @OneToMany(mappedBy = "team")

연관관계의 주인과 mappedBy

  • 객체 연관관계: 2개
    • Member -> Team (단방향)
    • Team -> Member (단방향)
    • 서로 다른 단방향 관계 2개임
    • 둘 중 하나로 외래 키를 관리해야 함
  • 테이블 연간관계: 1개
    • Member <-> Team (양방향)
    • 외래 키 하나로 두 테이블의 연관관계 관리

연관관계의 주인

  • 양방향 매핑 규칙
    • 연관관계의 주인만이 외래 키를 관리
    • 주인이 아닌 쪽은 읽기만 가능 (mappedBy 있는 쪽)
    • 외래 키가 있는 곳(1:n에서 n쪽에)을 주인으로 정해라!

양방향 매핑시 가장 많이 하는 실수

  • 연관관계의 주인에 값을 입력하기 않음
  • 순수한 객체 관계를 고려하면 항상 양쪽 다 값을 입력해야 함
  • 연관관계 편의 메소드를 생성
    • team.addMember(member);
  • 양방향 매핑시에 무한 루프 조심

❤️ 정리

  • 단방향 매핑만으로도 이미 연관관계 매핑은 완료
  • 양방향 매핑은 반대 방향으로 조회(객체 그래프 탐색) 기능이 추가된 것 뿐
  • JPQL에서 역방향으로 탐색할 일이 많음
  • 단방향 매핑을 잘 하고 양방향은 필요할 때 추가해도 됨(테이블에 영향 안 줌)

0개의 댓글