양쪽이 서로 하나의 관계만 가진다.일대일 관계는 그 반대도 일대일 관계다.테이블 관계에서 일대다,다대일은 항상 다 쪽이 외래키를 가지지만, 일대일 관계는 주 테이블이나 대상 테이블 둘 중 어느 곳이나 외래키를 가질 수 있다.대상 테이블이라함은 주테이블의 추가 정보를 담고 있는 테이블을 의미한다.
일대일 관계를 구성할 때 객체지향 개발자들은 주 테이블에 외래 키가 있는 것을 선호한다.
JPA도 주 테이블에 외래 키가 있으면 좀 더 편리하게 매핑할 수 있다.

단방향
일대일 관계이므로 객체 매핑에 @OneToOne을 사용했고 데이터 베이스에는 LOCKER_ID외래 키에 유니크 제약 조건을 추가 했다.
@OneToOne
@JoinColumn(name="LOCKER_ID")
private Locker locker;
@Column(name="Member_ID")
private Long id;
양방향
양방향 이므로 연관관계의 주인을 정해야 한다. 여기서는 MEMBER 테이블이 외래 키를 가지고 있으므로 Memember.locker가 연관관계의 주인이다.
따라서 반대 매핑인 사물함의 Locker.member는 mappedBy를 선언해서 연관관계의 주인이 아니라고 설정한다.

@OneToOne //1:1
@JoinColumn(name="LOCKER_ID") //외래키
private Locker locker
@OneToOne(mappedby="locker") //1:1 mapped by :외래키 아님
private Member member;
대상 테이블에 외래키가 있는 일대일 관계의 경우이다.
단방향
일대일 관계 중 대상 테이블에 외래 키가 있는 단방향 관계는 JPA에서 지원하지 않는다.
단방향 관계를 Locker에서 Member방향으로 수정하거나 ,양방향 관계로 만들고 Locker를 연관관계의 주인으로 설정해야 한다.
JPA 2.0 부터 일대다 단방향 관계에서 대상 테이블에 외래키가 있는 매핑을 허용했다. 하지만,일대일 단방향은 이런 매핑을 허용하지 않는다.

JPA에서는 대상 테이블에 외래키가 있는 경우 매핑을 허용하지 않으며, 대신 주 테이블에 외래키를 두는 방식으로 매핑을 수행한다.이러한 방식은 일반적인 데이터 설계 방식과 다르지만 객체지향 모델링과 일치 시키기 위해서 이와같이 매핑이 수행된다.
일반적으로 객체 지향 프로그래밍에서는 다른 객체를 참조하고 싶으면 주소값 가지고 있는게 일반적이다.
양방향
일대일 매핑에서 대상 테이블에 외래 키를 두고 싶으면 이렇게 양방향으로 매핑한다.주 엔티티인 Member엔티티 대신에 대상 엔티티인 Locker를 연관관계의 주인으로 만들어서 LOCKER테이블의 외래 키를 관리하도록 한다.

@OneToOne(mappedBy="member")
private Locker locker;
@Column(name="LOCKER_ID")
private Long id;
**@JoinColumn(name="MEMBER_ID")
private Member member;**