기본적으로 연관 관계는 3가지를 고려 해야한다. -> 다중성, 단방향과 양방향, 연관관계 주인
다대일 단방향
예시를 보자.
여러명의 회원은 하나의 팀에 소속된다. 그리고 반대로 하나의 팀에 여러 멤버가 소속될 수 있다. (N:1)
항상 DB에선 N쪽에 외래키가 존재한다. (반대에 있으면 정규형이 깨지기 때문에 당연히 안됨)
위 예시는 Member 엔티티가 주인이기 때문에, Member 엔티티가 Team을 가지고 있다.
다대일 양방향
@Entity
@Getter @Setter
public class Team {
@Id @GeneratedValue
@Column(name = "team_id")
private Long id;
private String name;
@OneToMany(mappedBy = "team") // 저는 team 컬럼에 의해 관리되는 필드입니다.
private List<Member> members = new ArrayList<>();
}
다대일 양방향 관계는 Team에서도 Member을 조회하기 위해 양방향 참조를 가지고 있는 형태이다.
하지만 연관관계의 주인은 Member이기 때문에, Team엔티티에서 member 데이터를 변경한다고 해서 물리 DB에 반영이 되진 않는다.