일대일
• 회원이 딱 하나의 락커를 가지고 있는 상황이다. 반대로 락커도 회원 한명만 할당 받을 수 있는 비즈니스 적인 룰이 있고이때, 둘의 관계는 일대일 관계이다, (일대일 관계는 그 반대도 일대일)
• 일대일 관계는 다대일 단방향과 매우 유사하다 (유니크가 들어가냐, 들어가지 않냐의 차이)
• 주 테이블이나 대상 테이블 중에 외래 키 선택 가능
• 주 테이블에 외래 키 (단방향, 양방향)
• 대상 테이블에 외래 키 (단방향, 양방향) = 총 네 가지의 경우의 수
• 외래 키에 데이터베이스 유니크(UNI) 제약조건 추가
• 일대일에서는 어느 테이블FK를 가지면 그 테이블과 매핑되는 객체가 연관관계의 주인이 된다.
1-1. 주 테이블 왜래 키 단방향
public class Member{
@OneToOne
@JoinColumn(name = "LOCKER_ID")
private Locker locker;
}
- 다대일(@ManyToOne) 단방향 매핑과 유사
1-2. 주 테이블 왜래 키 양방향
public class Member{
@OneToOne
@JoinColumn(name = "LOCKER_ID")
private Locker locker;
}
public class Locker{
@OneToOne(mappedBy = "locker")
private Member member;
}
- 다대일 양방향 매핑처럼 왜리 키가 있는 곳이 연관관계의 주인
- 반대편은 mappedBy 적용
2-1. 대상 테이블 왜래 키 단방향 (JPA가 지원하지 않음)
2-2. 대상 테이블 왜래 키 양방향
public class Locker{
@OneToOne
@JoinColumn(name = "MEMBER_ID")
private Member member;
}
public class Member{
@OneToOne(mappedBy = "member")
private Locker locker;
}
일대일 정리
주 테이블에 외래 키 (권장)
• 주 객체가 대상 객체의 참조를 가지는 것 처럼 주 테이블에 외래 키를 두고 대상 테이블을 찾음
• 객체지향 개발자 선호
• JPA 매핑 편리
• 장점: 주 테이블만 조회해도 대상 테이블에 데이터가 있는지 확인 가능
• 단점: 값이 없으면 외래 키에 null 허용
대상 테이블에 외래 키
• 대상 테이블에 외래 키가 존재
• 전통적인 데이터베이스 개발자 선호
• 장점: 주 테이블과 대상 테이블을 일대일에서 일대다 관계로 변경할 때 테이블 구조 유지
• 단점: 프록시 기능의 한계로 지연 로딩으로 설정해도 항상 "즉시 로딩"됨
'JPA' 카테고리의 다른 글
JPA - 상속관계 매핑 (0) | 2022.04.10 |
---|---|
JPA - 다양한 연관관계 매핑(4) : 다대다 [N : M] (0) | 2022.04.10 |
JPA - 다양한 연관관계 매핑(2) : 일대다 [1 : N] (0) | 2022.04.09 |
JPA - 다양한 연관관계 매핑(1) : 다대일 [N : 1] feat. 연관관계 매핑시 고려사항 (0) | 2022.04.09 |
JPA - 연관관계 매핑 기초(3) : 양방향 연관관계와 연관관계의 주인 (2) (0) | 2022.04.09 |
댓글