연관관계 편의 메서드: 양방향 연관관계를 한 번에 설정하는 편리한 메서드
3가지 선택지가 있습니다.
엔티티 A에 둔다.
엔티티 B에 둔다.
엔티티 A,B에 둘 다 둔다.
둘 다 두는 것은 혼란을 가중하기 때문에 제외하고, A, B 중 하나를 선택해서 사용하는 것이 좋다.
그러면 여기서 A, B 중에 하나를 선택해야 하는데 사실 이 부분은 정답이 없다.
이 부분은 JPA의 영역이라기보다는 오히려 객체지향 설계의 영역이기 때문이다.
예를 들어, Order와 Delivery 중에서 우리 팀의 핵심 비즈니스가 주문이라면 Order에 연관관계 편의 메서드를 두는 것이 더 나은 선택일 확률이 높다.
그런데 만약 우리 팀이 배달을 책임지는 팀이고 Order 엔티티는 있지만, 관련된 정보는 크게 의미가 없다면 Delivery를 중심으로 비즈니스 로직이 진행되므로, Delivery가 중심 엔티티가 되기 때문에 Delivery에 연관관계 편의 메서드를 두는 것이 나은 선택이 된다.
Team, 일
Member, 다
다대일 양방향 관계이며 연관관계 주인은 Member라고 가정하자,
public void setTeam(Team team) {
if (this.team != null) { // 기존에 이미 팀이 존재한다면
this.team.getMembers().remove(this); // 관계를 끊는다.
}
this.team = team;
team.getMembers().add(this);
}
위와 같은 메서드를 비즈니스 로직이 진행되는 중심 엔티티에 둔다.