일대일 관계
JPA에서 단방향 및 양방향 일대일 관계의 외래키 처리와 지연 로딩 문제
2024. 7. 22. 12:20
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 |