1:1 연관관계 매핑은 외래 키의 위치에 따라 두 가지의 매핑이 존재한다.
1:1 연관관계 매핑은 주 테이블이나 대상 테이블 중에 외래 키를 어디에 둘지 선택할 수 있다.
주 테이블과 대상 테이블 매핑 장단점
| 외래키 위치 | 설명 | 장점 | 단점 |
|---|---|---|---|
| 주 테이블 | |||
| (많이 접근하는 테이블) | 객체 지향 개발자들이 선호하고 JPA 매핑이 편리하다. | 주 테이블만 조회해도 대상 테이블에 데이터가 있는지 확인이 가능 | |
| (외래키가 있기 때문) | 값이 없으면 외래 키에 NULL 을 허용해야 한다. | ||
| (DB입장에서는 치명적) | |||
| 대상 테이블 | 전통적인 DBA 가 선호하는 방식NULL 을 허용해야 하는 문제도 없다. | 주 테이블과 대상 테이블을 일대일에서 일대다 관계로 변경할 때 테이블 구조를 유지 가능 | 양방향 매핑을 해야 한다. 지연 로딩으로 설정해도 항상 즉시 로딩 된다. |

하나의 회원(MEMBER)은 하나의 락커(LOCKER)를 가질 수 있다.
1:1 관계 시 DB 외래 키에 유니크 제약조건(UNI) 추가하는 것을 권장한다.
주 테이블(Member) 조회만으로 대상 테이블(Locker) 의 데이터를 확인할 수 있다.
대상 테이블(Locker) 테이블의 값이 없을 경우 외래 키에 NULL 값을 허용해야 한다.
일대일 단방향 연관관계 매핑 : 외래키 관리
@Entity
public class Member {
@OneToOne
@JoinColumn(name = "locker_id")
private Locker locker;
}
일대일 양방향 연관관계 매핑 : 읽기 전용
@Entity
public class Locker {
@OneToOne(mappedBy = "locker")
private Member member;
}
