Direction
): 단방향, 양방향Multiplicity
): 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:M)Owner
) : 객체 양방향 연관관계는 관리 주인이 필요"객체지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것이다."
- 조영호 (객체지향의 사실과 오해)
- 회원과 팀이 있다.
- 회원은 하나의 팀에만 소속될 수 있다.
- 회원과 팀은 다대일 관계이다.
객체를 테이블에 맞추어 모델링하면 연관관계가 없는 객체가 된다.
→ 참조 대신, MEMBER
테이블의 외래 키, TEAM_ID
를 그대로 사용!
TEAM
객체를 참조하지 않고, 외래 키 값 TEAM_ID
를 그대로 사용한다.Member
, Team
테이블 생성 완료!member.setTeamId(team.getId());
: 외래 키 식별자를 직접 다룬다.member
를 조회해왔음에도 불구하고 member
가 속한 팀을 알기 위해서member
가 가진 team.id
, 즉 식별자로 테이블을 검색해서 가져와야 한다. 📌 문제점
객체를 테이블에 맞추어 데이터 중심으로 모델링하면, 협력관계를 만들 수 없다.
- 테이블은 외래 키로 조인을 사용해서 연관된 테이블을 찾는다.
- 객체는 참조를 사용해서 연관된 객체를 찾는다.
TEAM
의 id
가 아닌 TEAM
의 참조값을 그대로 가져온다.MEMBER
객체의 TEAM
레퍼런스와 MEMBER
테이블의 TEAM_ID(FK)
를 매핑해야 한다.@ManyToOne
: MEMBER
:TEAM
= N:1 (다대일 관계)@JoinColumn(name = "TEAM_ID")
: 객체 연관관계 TEAM
참조와 테이블 연관관계 TEAM_ID
외래 키와 매핑→ ORM 매핑이 완성됨!member
에 team
참조를 저장한다.JPA
가 알아서 team
엔티티에서 pk
값을 추출해서 member
의 fk
로 설정한다.