일대일(1:1)
- 일대일 관계는 그 반대도 일대일 관계이다.
- 주 테이블이나 대상 테이블 중에 외래키 선택 가능
- 주 테이블에 외래키
- 대상 테이블에 외래키
- 외래키에 데이터베이스 유니크(UNI) 제약조건 추가
주 테이블에 외래키 단방향
[Member]
@Entity
public class Member {
@Id @GeneratedValue
private Long id;
@Column(name="USERNAME")
private String username;
@OneToOne
@JoinColumn(name = "LOCKER_ID")
private Locker locker;
}
[Locker]
@Entity
public class Locker {
@Id @GeneratedValue
@Column(name = "LOCKER_ID")
private Long id;
private String name;
}
- 다대일 단방향 매핑과 유사하다.
- 다대일 - 단방향 연관관계을 참고하면 될 듯하다.
주 테이블에 외래키 양방향
[Member]
@Entity
public class Member {
@Id @GeneratedValue
private Long id;
@Column(name="USERNAME")
private String username;
@OneToOne(mappedBy = "member")
private Locker locker;
}
[Locker]
@Entity
public class Locker {
@Id @GeneratedValue
@Column(name = "LOCKER_ID")
private Long id;
private String name;
@OneToOne
@JoinColumn(name = "MEMBER_ID")
private Member member;
}
- 다대일 양방향 매핑과 유사하다.
- 다대일 - 양방향 연관관계를 참고하면 될 듯하다.
대상 테이블에 외래키 양방향
[Member]
@Entity
public class Member {
@Id @GeneratedValue
private Long id;
@Column(name="USERNAME")
private String username;
@OneToOne(mappedBy = "member")
private Locker locker;
}
[Locker]
@Entity
public class Locker {
@Id @GeneratedValue
@Column(name = "LOCKER_ID")
private Long id;
private String name;
@OneToOne
@JoinColumn(name = "MEMBER_ID")
private Member member;
}
- 대상 테이블의 외래키 단방향은 JPA에서 지원하지 않는다.
- 테이블의 구조만 달라졌을뿐 매핑하는 것은 주 테이블의 외래키 양방향과 같다.
주 테이블에 외래키
- 주 객체가 대상 객체의 참조를 가지고 있는 것처럼 주 테이블에 외래키를 두고 대상 테이블을 찾는다.
- 객체지향 개발자가 선호한다.
- 단방향으로 설정해도 Member만 가져오면 Locker의 값을 알 수 있으므로
- 대상 테이블에 외래키를 하면 무조건 양방향으로 설정해야하므로 복잡하다.
- JPA 매핑 편리 -> 단방향으로 해도 된다.
- 장점 : 주 테이블만 조회해도 대상 테이블에 데이터가 있는지 확인 가능
- 단점 : 값이 없으면 외래키에 null을 허용한다.
대상 테이블에 외래키
- 대상 테이블에 외래키가 존재한다.
- 전통적인 데이터베이스 개발자가 선호한다.
- 장점 : 주 테이블과 대상 테이블을 일대일에서 일대다 관계로 변경할 때 테이블 구조가 유진된다.
- 단점 : 프록시 기능의 한계로 지연로딩으로 설정해도 항상 즉시로딩된다.
Author And Source
이 문제에 관하여(일대일(1:1)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jhp1115/일대일11저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)