

-> 테이블 중심 사고의 문제점
예시)
SELECT *
FROM MEMBER m
JOIN TEAM t ON m.TEAM_ID = t.TEAM_ID;
이런식으로 테이블은 외래키를 통해서 매핑하는 한편 객체는 참조를 통해서 매핑하므로 테이블에 맞추어 매핑시에는 협력 관계를 만들기 힘들다.
| 구분 | 테이블 | 객체 |
|---|---|---|
| 연관관계 표현 | 외래 키(FK) | 객체 참조 |
| 관계 탐색 | JOIN | 참조로 접근 |
| 사고 방식 | 데이터 중심 | 협력 관계 중심 |
테이블은 외래 키 하나로 양방향 조회 가능
객체는 참조를 가진 방향으로만 탐색 가능
-> 이 간극을 메워주는 게 JPA 연관관계 매핑
@Entity
class Team {
@Id @GeneratedValue
Long id;
String name;
}
@Entity
public class Member {
@Id @GeneratedValue
private Long id;
@ManyToOne
@JoinColumn(name = "TEAM_ID")
private Team team;
}
@JoinColmn을 통해서 다른 테이블의 외래키와 매핑하는것이 가능하다!
양방향 매핑 코드 : DB는 애초에 양방향이나 객체는 양방향이라는 개념이 없음! 객체 단방향 2가지가
같이 붙어 있는 형태이다!
@Entity
public class Team {
@OneToMany(mappedBy = "team")
private List<Member> members = new ArrayList<>();
}
@Entity
public class Member {
@ManyToOne
@JoinColumn(name = "TEAM_ID")
private Team team;
}
외래 키를 관리하는 쪽이 연관관계의 주인이다
테이블 기준: MEMBER.TEAM_ID
따라서 Member.team이 연관관계의 주인

왜일까? 2개중 하나의 테이블만 접근할수 있어야지만이 DB변경을 용이하게 할수 있기 떄문!
한쪽에서만 변경이 되도록 하고 한쪽은 읽기만 될수 있도록!!
@OneToMany(mappedBy = "team") // 주인 아님
private List<Member> members;
mappedBy를 통해서 주인을 표시하여 줄수 있다.
객체 탐색이 필요할 때만 양방향
기본은 단방향 매핑
양방향이면 항상 양쪽 값 다 세팅
참고(Reference)
https://wale.tistory.com/entry/JPA-%EC%97%B0%EA%B4%80%EA%B4%80%EA%B3%84-%EB%A7%A4%ED%95%91-%EA%B8%B0%EC%B4%881