객체를 테이블에 맞추어 데이터 중심으로 모델링하면 협력 관계를 만들 수 없다.
- 테이블은 외래 키로 조인을 사용해서 연관된 테이블을 찾는다.
- 객체는 참조를 사용해서 연관된 객체를 찾는다.
시나리오
객체의 양방향 관계는 사실 양방향 관계가 아니라 서로 다른 단방향 관계 2개이다.
객체를 양방향으로 참조하려면 단방향 연관관계를 2개 만들어야 한다.
테이블은 외래 키 하나로 두 테이블의 연관관계를 관리한다.
MEMBER.TEAM_ID 외래 키 하나로 양방향 연관관계 가짐(양쪽으로 조인할 수 있다)
SELECT *
FROM MEMBER M
JOIN TEAM T ON M.TEAM_ID = T.TEAM_ID
SELECT *
FROM TEAM T
JOIN MEMBER M ON T.TEAM_ID = M.TEAM_ID
그러므로 둘 중 하나로 외래키를 관리해야 한다.
양방향 매핑 규칙
누구를 주인으로 ? 외래 키가 있는 곳을 주인으로 정하자.
순수 객체 상태를 고려해서 항상 양쪽에 값을 설정한다.
연관관계 편의 메소드를 생성하면 좋다.
양방향 매핑 시 무한 루프를 조심한다. (ex. toString(), lombok, Json 생성 라이브러리)
연관관계의 주인은 외래 키의 위치를 기준으로 정해야 한다!