코드 그라데이션

일대일 [1 : 1] 본문

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

'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