JPA에서 단방향 및 양방향 일대일 관계의 외래키 처리와 지연 로딩 문제
❗️일대일 대상 테이블에 외래키 단방향 관계는 JPA에서 지원하지 않으며, 양방향 관계만 지원합니다.
[인프런 김영한님 자료]

대상 테이블에 외래키가 존재하는 경우, 프록시 기능의 한계로 인해 지연 로딩으로 설정해도 항상 즉시 로딩됩니다.
예를 들어, Member 객체를 가져왔을 때 JPA는 가져온 Member 객체에 Locker가 있는지 여부를 알아야 합니다.
1. 외래키가 Locker 에 있을 때
외래키가 Locker에 있다면, Member 엔티티를 가져올 때 Member 클래스에 정의된 Locker가 존재하는지 확인해야 합니다. 이때 Member 테이블에는 외래키가 존재하지 않기 때문에, 지연 로딩 설정 여부와 상관없이 Locker 테이블을 조회하여 Member와 연결된 Locker가 있는지 확인하는 추가 쿼리가 발생합니다.
2. 외래키가 Member에 있을 때
외래키가 Member에 있다면, Member 테이블의 조회만으로도 Member와 연결된 Locker가 있는지 여부를 판단할 수 있습니다. 따라서 이 경우에는 지연 로딩(lazy loading) 또는 즉시 로딩(eager loading) 설정이 가능합니다.
요약
- 외래키가
Locker에 있는 경우:Member를 조회할 때 항상Locker테이블을 추가로 조회해야 하므로, 지연 로딩 설정이 무시되고 즉시 로딩이 이루어집니다. - 외래키가
Member에 있는 경우:Member테이블만으로Locker와의 연결 여부를 확인할 수 있으므로, 지연 로딩과 즉시 로딩 설정이 가능합니다.
'Spring' 카테고리의 다른 글
| JPQL 실행 시 Flush와 영속성 컨텍스트 동작 확인 (0) | 2024.07.22 |
|---|---|
| API 통신 시 null 값 처리: 포함 vs. 미포함의 장단점 (0) | 2024.07.22 |
| [Spring] DynamicInsert 사용 이유 (0) | 2024.07.22 |
| Optional 클래스의 orElseThrow (0) | 2024.07.22 |
| [Spring] Enum 타입으로 Exception 구현하기 (0) | 2024.07.22 |