객체에는 양방향 연관관계라는 것이 없다. 연관관계를 애플리케이션 로직으로 잘 묶어서 양방향인 것처럼 보이게 할 뿐이다.
그렇다면 두 연관관계를 어떻게 묶을까? 테이블은 외래키가 존재한다. 객체에서는 이들 중 하나를 정해서 테이블의 외래키를 관리해야 하는데 이를 연관관계의 주인이라 한다.
규칙
- 주인만이 외래캐를 관리(CRUD)할 수 있다. 반대로 주인이 아닌 쪽은 읽기만 할 수 있다.
- 주인은
mappedBy
속성을 사용하지 않는다.
양방향 연관관계
- 객체관점에서는 양쪽 방향에 모두 값을 입력해주는 것이 가장 안전하다.
- 연관관계 주의에서 set을 해줄 때 편의 메소드를 만들자
public void setUser(User user) {
if (user != null) {
user.getPointHistoryList().add(this);
}
this.user = user;
}
- 연관관계의 주인은 외래 키의 위치와 관련해야 정해야지 비즈니스 중요도로 접근하면 안 된다.