단방향 연관관계
다음 예시를 통해 연관관계 중 먼저 다대일(N:1) 단방향 관계를 알아보자.
- 회원과 팀이 있다.
- 회원은 하나의 팀에만 소속될 수 있다.
- 회원과 팀은 다대일 관계이다.

객체 연관관계
- 회원 객체는 Member.team 필드로 팀 객체와 연관관계를 맺는다.
- 회원 객체와 팀 객체는 단방향 관계이다. 회원은 Member.team 필드로 팀을 알 수 있지만, 반대로 팀에서는 회원을 알 수 없다.
테이블 연관관계
- 회원 테이블은 TEAM_ID 외래키로 팀 테이블과 연관관계를 맺는다.
- 회원 테이블과 팀 테이블은 양방향 관계이다. 회원 테이블의 TEAM_ID 외래키를 통해서 회원과 팀을 조인할 수 있고 반대로 팀과 회원도 조인할 수 있다. MEMBER 테이블의 TEAM_ID 외래키 하나로 MEMBER JOINI TEAM, TEAM JOIN MEMBER 둘 다 가능하다.
객체 연관관계와 테이블 연관관계의 가장 큰 차이
- 객체간 참조를 통한 연관관계는 언제나 단방향이다. 객체간 연관관계를 양방향으로 만들고 싶으면 반대쪽에도 필드를 추가해서 참조해야 한다. 결국 연관관계를 하나 더 만들어야 하는데, 이렇게 양쪽에서 서로 참조하는 것을 양방향 연관관계라 한다. 하지만 정확히 이야기하자면 양방향 관계가 아니라 서로 다른 단방향 관계 2개이다. 반면에 데이터베이스 테이블은 외래키 하나로 양방향으로 조인할 수 있다.
객체는 참조를 사용해서 연관관계를 탐색할 수 있는데, 이것을 객체 그래프 탐색이라 한다.
아래의 코드를 통해 실제 다대일 단방향 연관관계를 맵핑해보자.
@Entity
pubic class Member {
@Id
@Column(name = "MEMBER_ID")
private Long id;
private String username;
@ManyToOne
@JoinColumn(name = "TEAM_ID")
private Team team;
}