인강/자바 ORM 표준 JPA 프로그래밍 - 기본편
연관관계 매핑
꾸준2
2024. 9. 10. 19:47
중요!!
1. 연관관계의 주인은 외래 키의 위치를 기준으로 정해야함
2. 단방향 매핑 설계를 목표로 하고 필요할 때 양방향 매핑을 추가한다.
방향(Direction) : 단방향, 양방향
다중성(Multiplicity) : 다대일, 일대다, 일대일
연관관계의 주인(Owner) : 객체 양뱡향 연관관계는 관리 주인이 필요
객체를 테이블에 맞추어 모델링
@Entity
public class Member {
@Id @GeneratedValue
private Long id;
@Column(name = "USERNAME")
private String name;
@Column(name = "TEAM_ID") // 참조 대신에 외래 키를 그대로 사용
private Long teamId;
}
@Entity
public class Team {
@Id @GeneratedValue
private Long id;
private String name;
}
객체 지향 모델링
@Entity
public class Member {
@Id @GeneratedValue
private Long id;
@Column(name = "USERNAME")
private String name;
@ManyToOne
@JoinColumn(name = "TEAM_ID") // 객체의 참조와 테이블의 외래 키를 매핑
private Team team;
}
@Entity
public class Team {
@Id @GeneratedValue
private Long id;
private String name;
}
객체를 테이블에 맞추어 모델링 vs 객체 지향 모델링
1. 멤버가 소속해있는 팀을 찾을때
// 객체를 테이블에 맞추어 모델링
// 멤버 조회
Member findMember = em.find(Member.class, member.getId());
// 해당 멤버 팀 id값 저장
Long findTeamId = findMember.getTeamId();
// 팀 조회(위에 저장한 팀 id값을 이용)
Team findTeam = em.find(Team.class, team.getId());
// 객체 지향 모델링
// 멤버 조회
Member findMember = em.find(Member.class, member.getId());
//참조를 사용해서 연관관계 조회
Team findTeam = findMember.getTeam();