코드 그라데이션
일대일 [1 : 1] 본문
일대일 관계
일대일: 주 테이블에 외래 키 단방향
• 다대일(@ManyToOne) 단방향 매핑과 유사
일대일 : 주 태이블에 외래 키 양방향
일대일: 주 테이블에 외래 키 양방향 정리
실습
Locker
@Entity
@NoArgsConstructor
public class Locker {
@Id
@GeneratedValue
private Long id;
private String name;
}
Member에 추가
@OneToOne
@JoinColumn(name = "LOCKER_ID")
private Locker locker;
실행하면
Hibernate:
create table Locker (
id bigint not null,
name varchar(255),
primary key (id)
)
Hibernate:
create table Member (
MEMBER_ID bigint not null,
USERNAME varchar(255),
LOCKER_ID bigint, // 여기
TEAM_ID bigint,
primary key (MEMBER_ID)
)
Member에 LOCKER_ID 들어감을 확인할 수 있음.
양방향으로 만들고 싶다면,
Locker 클래스에
//양방향으로 만들고 싶다면
@OneToOne(mappedBy = "locker")
private Member member;
이렇게 추가해주면 됨. 얘는 읽기 전용
일대일 : 대상 테이블에 외래 키 단방향
=> 이거는 안 된다!!!
지원도 안 되고 방법도 없다.
일대일 : 대상 테이블에 외래 키 단방향 정리
• 단방향 관계는 JPA 지원X
• 양방향 관계는 지원
일대일 : 대상 테이블에 외래 키 양방향
=> 좀 논란거리가 있음.
그러면, 외래키를 Member가 들고 있는 게 좋을까, 아니면 Locker가 들고 있는 게 좋을까?
- 둘 중 어떤 방법을 써도 유효한 일대일 관계는 성립한다.
- 만약 시간이 흘러 룰이 바뀌는 경우가 생긴다면, alter를 써서 Unique 제약 조건만 빼서 수정하면 된다.
- 장기적으로 봤을 때 상황에 따라 달라지므로 성질 난다.
- 그냥 개발자의 입장에서만 봤을 때는 MEMBER 테이블에 FK가 가지고 있는 게 더 성능상 이점은 있다.
- 종합적으로 판단..
영한쌤은 이 그림을 더 선호함.
일대일 : 대상 테이블에 외래 키 양방향 정리
- 사실, 일대일 주 테이블에 외래 키 양방향과 매핑 방법은 같음
실습 X
일대일 정리
728x90
'Spring > JPA 공부' 카테고리의 다른 글
실습 3 - 다양한 연관관계 매핑 (1) | 2023.08.22 |
---|---|
다대다 [N : N] (0) | 2023.08.21 |
일대다 [1 : N] (0) | 2023.08.20 |
다대일 [N : 1] (0) | 2023.08.20 |
다양한 연관관계 매핑 도입 (0) | 2023.08.20 |
Comments