@OneToOne
JPA를 공부하면서 정리를 한 내용들 입니다.
-참고 김영한 개발자님 : 인프런 - 자바 ORM 표준 JPA 프로그래밍
@OneToOne
일대일 관계는 그 반대도 일대일입니다.
일대일 관계는 특이하게 주 테이블이나 대상 테이블 중에 외래 키를 넣을 테이블을 선택 가능합니다.
-
주 테이블에 외래 키 저장
-
대상 테이블에 외래 키 저장
외래 키에 데이터베이스 유니크 제약조건 추가되어야 일대일 관계가 됩니다.
일대일 - 주 테이블에 외래 키 단방향
-
회원이 딱 하나의 락커를 가지고 있는 상황으로 반대로 락커도 회원 한명만 할당 받을 수 있는 비즈니스 적인 룰이 있고, 이때, 둘의 관계는 일대일 관계입니다.
-
이 경우 멤버를 주 테이블로 보고 주 테이블 또는 대상 테이블에 외래 키를 저장할 수 있습니다. (단, 유니크 제약조건을 추가한 상태)
-
다대일[N:1] 단방향 관계 매핑과 JPA 어노테이션만 달라지고, 거의 유사합니다.
일대일 - 주 테이블에 외래 키 양방향
다대일[N:1] 양방향 매핑 처럼 외래키가 있는 곳이 연관관계의 주인입니다.
@OneToOne 어노테이션으로 일대일 단방향 관계를 매핑하고, @JoinColumn을 넣어줍니다.
@Entity
public class Member {
...
@OneToOne
@JoinColumn(name = "locker_id")
private Locker locker;
...
}
반대편에 mappedBy를 적용시켜주지 않는다면 단방향 관계 매핑이고,
반대편에 mappedBy를 적용시켜주면 일대일 양방향 관계 매핑이 됩니다.
mappedBy = “locker” 는 Member엔티티에 있는 locker 필드와 매핑 되었다는 것을 의미합니다.
이 member 필드는 읽기 전용 필드입니다.
@Entity
public class Locker {
...
@OneToOne(mappedBy = "locker")
private Member member;
}
일대일 - 대상 테이블에 외래 키 단방향
일대일관계에서 대상 테이블에 외래 키를 저장하는 단방향 관계는 JPA에서 지원하지 않습니다.
일대일 - 대상 테이블에 외래 키 양방향
일대일 주 테이블에 외래 키 양방향 매핑을 반대로 뒤집었다고 생각하면 됩니다.