[개발] - Spring/JPA 공부
일대일 [1 : 1]
완벽한 장면
2023. 8. 21. 00:27
일대일 관계
일대일: 주 테이블에 외래 키 단방향
• 다대일(@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
반응형