1. 일대일 단방향(주 테이블에 외래키)
2. 일대일 양방향(주 테이블에 외래키)
@Entity
public class MemberMapping {
@Id
@GeneratedValue
@Column(name = "MEMBER_ID")
private Long id;
@Column(name = "USERNAME")
private String username;
@ManyToOne(fetch = FetchType.LAZY) //쿼리 분리
@JoinColumn(name = "TEAM_ID")
private TeamMapping team;
@OneToOne
@JoinColumn(name = "LOCKER_ID")
private Locker locker;
//...getter,setter
}
@Entity
public class Locker {
@Id @GeneratedValue
private Long id;
private String name;
@OneToOne(mappedBy = "locker")
private MemberMapping member;
//...getter,setter
}
3. 일대일 단방향(대상 테이블에 외래키)
4. 일대일 양방향(대상 테이블에 외래키)
일대일 관계 정리
1) 주 테이블에 외래키가 있는 경우(권장)
- 객체지향 개발자 선호, JPA 맵핑이 편리
- 장점) 주 테이블만 조회해도 대상 테이블에의 데이터 유무 확인 가능
- 단점) 값이 없을 경우 외래키에 null 허용
2) 대상 테이블에 외래키가 있는 경우- 전통적인 개발자 선호
- 장점) 주 테이블 / 대상 테이블을 일대일에서 일대다로 관계를 변경해도 테이블 구조 유지 가능
- 단점) 프록시 기능 한계로 지연로딩으로 설정해도 항상 즉시 로딩됨