Dev

[jpa] 참조키를 이용한 1:1 양방향 연관

Ryan Woo 2019. 3. 3. 21:17

3. [jpa] 1:1 양방향 연결

Member 측에서도 MemebershipCard 정보를 갖기 위해 연결 정보를 설정

public class Member {
@Id
private String email;
private String name;

@Temporal(TemporalType.DATE)
private Date createdDate;

@OneToOne(mappedBy = "owner")
private MembershipCard membershipCard;
}
@Test
public void 참조키를이용한일대일양방향연관() {
// 1. 생성된 멤버는 아직 MembershipCard 가 존재하지 않음
Optional<Member> member = memberRepository.findById(email);
assertThat(member.get().getMembershipCard()).isNull();

// 2. 멤버쉽 카드에 오너를 할당하여 생성 - 레이지 로딩
MembershipCard membershipCard = createMembershipCardWithOwner();
// 레이지 로딩이기 때문에 쿼리에 조인은 걸리지 않음
Optional<MembershipCard> getCard = membershipCardRepository.findById(number);

// 3. 멤버에 멤버십 카드 연결
member.get().setMembershipCard(membershipCard);

// 4. 멤버 재조회 - 즉시로딩, 멤버십 카드와 아우터 조인이 걸림
Optional<Member> getMember = memberRepository.findById(email);
assertThat(getMember.get().getMembershipCard().getNumber()).isEqualTo(number);
}