본 문서는 인프런의 자바 ORM 표준 JPA 프로그래밍 - 기본편 (김영한) 강의를 공부하며 작성한 개인 노트입니다.
용어
select * from member m
join team t on m.team_id = t.team_id
<객체 지향 모델링>
Member class
@Entity
public class Member {
...
@ManyToOne
@JoinColumn(name = "TEAM_ID")
private Team team;
}
Main class
Team team = new Team();
... // 팀 정보 설정
em.persist(team);
Member member = new Member();
... // 회원 정보 설정
member.setTeam(team);
em.persist(member);
...
Member findMember = em.find(Member.class, member.getId());
Team findTeam = findMember.getTeam(); // 객체 그래프 탐색
양방향 연관관계 - 회원에서 팀 연결, 팀에서 회원 연결
Team class
@Entity
public class Team {
@Id @GeneratedValue
@Column(name = "TEAM_ID")
private Long id;
...
@OneToMany(mappedBy = "team")
private List<Member> members = new ArrayList<>();
...
}
@OneToMany(mappedBy = "변수명")
: Member class의 연결되는 변수명mappedBy
team 연관관계 또는 members 연관관계 중 하나로 외래 키를 관리해야 함
양방향 매핑 규칙
누구를 주인으로?
- 외래 키가 있는 쪽을 주인으로
- 다 인쪽
연관관계의 주인에 값을 입력하지 않는 실수
member.setTeam(team)
으로 연관관계 설정해야 함@Entity
public class Member {
...
public void changeTeam(Team team) {
this.team = team;
team.getMembers().add(this);
}
}
참조를 사용한 연관관계