회원 ( Member ) : N
팀 ( Team ) : 1
회원과 팀은 다대일의 관계
: 1개의 팀에 여러명의 회원이 있다.
테이블 → '외래키'로 조인
객체 → 참조 ex) member.getId()
* 단방향
@ManyToOne
@JoinColumn(name = "Team_ID")
private Team team;
* 양방향 연관관계
- 양방향 매핑 ( 반대방향으로 객체 그래프 탐색 )
@OneToMany(mappedBy = "team") // team 은 Member 클래스에 있는 Team 의 변수명
List<Member> members = new ArrayList<>();
mappedBy 를 알기 위해선...객체와 테이블이 관계를 맺는 차이 알아야됨.
*객체와 테이블이 관계를 맺는 차이
객체 연관관계 = 2개
회원 → 팀 : 연관관계 1개 (단방향)
팀 → 회원 : 연관관계 1개 (단방향) <객체는 단방향으로 왔다갔다 하는것 편의상 양방향>
테이블 연관관계 = 1개
회원 ↔ 팀 : 연관관계 1개 (양방향) <사실 테이블은 방향이 없음 편의상 양방향>
* 연관관계의 주인
-양방향 매핑 규칙
: 객체의 두 관계중 하나를 주인으로 지정
: 테이블에 외래키가 있는 곳을 주인으로 정함
: 주인이 아니면 읽기만 가능
: 주인은 mappedBy 속성 사용 X
: 주인이 아니면 mappedBy 속성으로 주인 지정
* 많이 하는 실수
- 양방향 연관관계 주인을 설정하지 않음
- 순수 객체상태를 고려해서 항상 양쪽에 값을 설정하자
: flush(), clear() 를 안하면 1차 캐시에서 찾아오기 때문에 아무것도 출력이 안됨
Test 단계에서 문제 발생
- 연관관계 편의 메서드 생성
Member Class //연관관계 주인
public void changeTeam(Team team) {
this.team = team;
team.getMembers().add(this);
}
Team Class //연관관계 쫄따구
public void addMember(Member member){
member.setTeam(this);
members.add(member);
}
- 양방향 매핑시 무한로프 조심
ex) toString, lombok, JSON
* 단방향 매핑만으로 이미 연관관계 매핑은 완료
'Web > JPA' 카테고리의 다른 글
고급매핑 (0) | 2020.02.03 |
---|---|
다양한 연관관계 매핑 (0) | 2020.02.02 |
엔티티 매핑 (0) | 2020.01.31 |
플러시 (0) | 2020.01.30 |
영속성 관리 && 준영속성 (0) | 2020.01.29 |