JPA & Querydsl
JPA 연관관계 매핑
창따오
2023. 12. 5. 10:37
728x90
객체지향 설계의 목표
객체 지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것이다.
조영호님(객체지향의 사실과 오해)

객체를 테이블에 맞추어 데이터 중심으로 모델링을 하면 안되는 이유?
-> 객체 사이의 협력관계를 만들 수 없다.
- 테이블은 외래키로 조인을 사용해서 연관된 테이블을 찾는다.
- 객체는 참조를 사용해서 연관된 객체를 찾는다.
- 테이블과 객체 사이에는 이런 큰 간격이 있다.

양방향 관계(반대방향으로도 객체 그래프를 탐색)
- 객체의 양방향 관계는 사실 양방향 관계가 아니라 서로 다른 단방향 관계 2개이다.
- 객체를 양방향으로 참조하려면 단방향 연관관계를 2개 만들어야 한다.
테이블의 양방향 연관관계
- 테이블은 외래 키 하나로 두 테이블의 연관관계를 관리
- 다 테이블에 있는 외래키 하나로 양방향 연관관계를 가짐(join)
JPA를 이용하여 객체로 Entity를 설계할 때 주의할 점
양방향
*연관관계의 주인은 누구로?
- 객체의 두관계중 하나를 연관관계의 주인으로 지정해야한다.(다쪽 객체에 1의 외래키를 둠)
- 연관관계의 주인만이 외래 키를 관리(등록, 수정)할 수 있다.
- 주인이 아닌쪽은(반대편 객체 mapped by) 읽기만 가능하다.
- 주인은 mapped by 속성을 사용하지 않는다.
- 주인이 아니면 mappedBy 속성으로 주인을 지정해야 한다.
핵심은 연관관계의 주인은 외래키의 위치를 기준으로 정해야 한다.