Mapping
What is?
- 테이블 사이의 연관관계를 만드는 일
- 팀에는 선수가 있음
-> 팀과 선수는 연관관계가 있다!
종류
- 일대일 <> 일대일
- 일대다 <> 다대일
- 다대다 <> 다대다
Team, Player
- Team은 Player를 여러개 가진다.
- Player는 Team이 한개이다.
-> 일대다 <> 다대일
Spring에서
mapping
- @OneToOne
- @OneToMany
- @ManyToOne
- @ManyToMany
mappedBy
- @OneToMany(mappedBy = "team") 다음과 같이 사용한다,
- 모두 객체에 접근이 가능하다면 무결성을 해칠 수 있다.
- 하나의 객체만 테이블을 관리할 수 있도록 하는 방식
- mappedBy를 지정하면 다른 테이블을 관리할 수 없음!
- mappedBy를 지정하지 않은 테이블이 주인임
- 일반적으로 외래키를 가지는 객체를 주인으로 정함
fetch
- @ManyToOne(fetch = FetchType.LAZY) 다음과 같이 사용
- fetch = FetchType.LAZY: 지연로딩
- fetch = FetchType.EAGER: 즉시로딩
지연로딩 vs 즉시로딩
- 지연로딩은 프록시를 실제 사용할 때 초기화하면서 데이터베이스를 조회
- 즉시로딩은 바로 조회
- 즉시로딩에서 N+1 문제가 발생함
Player 구성하기
Entity
@Entity
public class Player {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column
private String name;
@Column
private long number;
@ManyToOne(fetch = FetchType.LAZY)
@JsonIgnore
private Team team;
}
@Entity(name = "team")
public class Team {
@OneToMany(mappedBy = "team")
@JsonIgnore
private List<Player> players;
}
- 연관관계의 주인은 Player

다음과 같이 Player을 조회하면 Team 필드가 있다!