현의 개발 블로그

[다양한 연관관계 매핑] 일대일 본문

스프링부트 이론/JPA

[다양한 연관관계 매핑] 일대일

hyun2371 2023. 5. 23. 17:34

앞에서 일대다 연관관계를 살펴보았다.

 

다양한 연관관계 매핑(2) - 일대다

앞에서 다대일 연관관계를 살펴보았다. 다양한 연관관계 매핑(1) - 다대일 연관관계 매핑 시 고려사항 3가지 1. 다중성 다대일: @ManyToOne 일대다: @OneToMany 일대일: @OneToOne 다대다: @ManyToMany 2. 단방향

hyun-keepdeving.tistory.com

이번에는 일대일 연관관계를 알아보자

 

일대일 관계

일대일 관계는 그 반대도 일대일이다.

외래키를 주 테이블과 대상 테이블 중 어느 곳에 놓을지 선택 가능하다.

외래 키에 데이터베이스 유니크 제약조건을 추가해야 한다.

 

주 테이블에 외래 키 단방향

Member 테이블을 주 테이블로 정하였다. Member에서 Locker를 조회하는 경우가 많기 때문이다.

 

Locker 테이블을 주 테이블로 정할 수도 있다.

그때는 Locker 테이블에 MEMBER_ID (FK, UNI)를 추가해야 한다.

 

주 테이블에 외래 키 단방향 매핑은 다대일 단방향 매핑과 유사하다.

//Member.java
@OneToOne
@JoinColumn(name = "LOCKER_ID")
private Locker locker;

 

주 테이블에 외래 키 양방향

 

다대일 양방향 매핑과 유사하다. 

외래 키가 있는 곳이 연관관계의 주인이다. 연관관계 반대편은 mappedBy를 적용한다.

//Member.java
@OneToOne
@JoinColumn(name = "LOCKER_ID")
private Locker locker;

//Locker.java
@OneToOne(mappedby = "locker")
private Member member;

 

대상 테이블에 외래 키 단방향

JPA에서 지원하지 않으므로 불가능하다.

 

대상 테이블에 외래 키 양방향

Locker.member를 연관관계 주인으로 매핑한다.

일대일 - 주테이블에 외래 키 양방향 매핑과 매핑 방법이 동일하다.

 

정리

주 테이블에 외래 키

- 주 객체가 대상 객체의 참조를 가지는 것처럼

- 주 테이블에 외래 키를 두고 대상 

- 객체 지향 개발자 선호

- JPA 매핑 편리

- 장점: 주 테이블만 조회해도 대상 테이블에 데이터가 있는지 확인 가능

- 단점: 값이 없으면 외래 키에 null 허용

 

대상 테이블에 외래키

- 대상 테이블에 외래 키가 존재

- 전통적인 DB 개발자 선호

- 장점: 주 테이블과 대상 테이블을 일대일에서 일대다 관계로 변경할 때 테이블 구조 유지

- 단점: 프록시 기능의 한계로 지연로딩으로 설정해도 항상 즉시 로딩된다.

 

결론: 주 테이블에 외래 키 단방향을 사용하자

 

 


Reference

 

자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의

JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., - 강의 소개 | 인프런

www.inflearn.com

 

Comments