JPA & Querydsl

JPA 연관관계 매핑

창따오 2023. 12. 5. 10:37
728x90

객체지향 설계의 목표

객체 지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것이다.

조영호님(객체지향의 사실과 오해)


객체를 테이블에 맞추어 데이터 중심으로 모델링을 하면 안되는 이유?

-> 객체 사이의 협력관계를 만들 수 없다.

  • 테이블은 외래키로 조인을 사용해서 연관된 테이블을 찾는다.
  • 객체는 참조를 사용해서 연관된 객체를 찾는다.
  • 테이블과 객체 사이에는 이런 큰 간격이 있다.

양방향 관계(반대방향으로도 객체 그래프를 탐색)

  • 객체의 양방향 관계는 사실 양방향 관계가 아니라 서로 다른 단방향 관계 2개이다.
  • 객체를 양방향으로 참조하려면 단방향 연관관계를 2개 만들어야 한다.

테이블의 양방향 연관관계

  • 테이블은 외래 키 하나로 두 테이블의 연관관계를 관리
  • 다 테이블에 있는 외래키 하나로 양방향 연관관계를 가짐(join)

JPA를 이용하여 객체로 Entity를 설계할 때 주의할 점
양방향
*연관관계의 주인은 누구로?

  1. 객체의 두관계중 하나를 연관관계의 주인으로 지정해야한다.(다쪽 객체에 1의 외래키를 둠)
  2. 연관관계의 주인만이 외래 키를 관리(등록, 수정)할 수 있다.
  3. 주인이 아닌쪽은(반대편 객체 mapped by) 읽기만 가능하다.
  4. 주인은 mapped by 속성을 사용하지 않는다.
  5. 주인이 아니면 mappedBy 속성으로 주인을 지정해야 한다.

핵심은 연관관계의 주인은 외래키의 위치를 기준으로 정해야 한다.