일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- springboot
- JPA
- JDBC
- 파이썬
- MVC
- 우분투
- git 충돌 해결
- 페이징 정렬
- Git
- github 복제
- jar빌드
- 스프링부트 OpenAI API
- Json 객체
- 자바
- Servlet
- 값 타입
- 비밀번호 재설정 API
- 프로그래머스
- MySQL
- 저장소 복제
- 두수의 합 자바
- 저장소 이전
- api 개발
- swap 메모리
- 스프링 이메일 전송
- Chat GPT
- HttpServletResponse
- JPQL
- 넘파이
- 서버 배포
- Today
- Total
현의 개발 블로그
[다양한 연관관계 매핑] 일대일 본문
앞에서 일대다 연관관계를 살펴보았다.
다양한 연관관계 매핑(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
'스프링부트 이론 > JPA' 카테고리의 다른 글
[다양한 연관관계 매핑] 실전 예제 (0) | 2023.05.23 |
---|---|
[다양한 연관관계 매핑] 다대다 (0) | 2023.05.23 |
[다양한 연관관계 매핑] 일대다 (0) | 2023.05.23 |
[다양한 연관관계 매핑] 다대일 (0) | 2023.05.23 |
[연관관계 매핑] 실전 예제 (0) | 2023.05.13 |