개요
- 테이블은 외래 키로 조인을 사용하여 연관된 테이블을 찾는다.
- 객체는 참조를 사용하여 연관된 객체를 찾는다.
- 테이블과 객체 사이에는 이런 패러다임 불일치가 있다.
- 객체의 참조와 테이블의 외래 키를 매핑하여 해결해보자.
연관관계 매핑 시 고려사항 3가지
- 다중성(Multiplicity) : N:1, 1:N, 1:1, N:M
- 방향(Direction) : 단방향(한 쪽만 참조), 양방향(양쪽 서로 참조)
- 방향은 객체 관계에만 존재하고, 테이블은 항상 양방향이다.
- 연관관계의 주인(Owner) : 객체 양방향 연관관계는 관리 주인을 정한다.
단방향 연관관계

- 회원(Member)은 하나의 팀(Team)에만 소속될 수 있다.
- 회원과 팀은 다대일 관계(N:1) 이다.
회원을 조회 후 회원이 소속한 팀을 알고 싶다면?
@Entity
public class Team {
@Id @GeneratedValue
@Column(name = "TEAM_ID")
private Long id;
@Column(name = "TEAM_NAME")
private String name;
}
@Entity
public class Member {
@Id @GeneratedValue
@Column(name = "MEMBER_ID")
private Long id;
@Column(name = "USER_NAME")
private String name;
// Member 를 찾고 Team 의 Id 를 통해 한 번 더 조회를 해야 한다.
// @Column(name = "TEAM_ID")
// private Long teamId;
// 연관 관계 맵핑(단방향)
@ManyToOne
@JoinColumn(name = "TEAM_ID")
private Team team;
}
@JoinColumn