양방향 1:1 관계 엔티티의 fetch join시 lazyloading 문제에 대해 질문드립니다.
안녕하세요. 영한님 강의를 보면서 실무에 처음으로 JPA를 도입해서 사용하고있습니다.
질문 내용은 페치조인시에 양방향으로 1:1 관계 매핑이 있는 엔티티의 경우 fetch type을 lazy로 설정하여도 즉시 조회 쿼리가 나가는 것 같아서 질문드립니다. 혹시 제가 설정을 잘못한 것인지 해결은 어떻게 해야할까요?
관계 구성은 간단하게 아래와 같습니다.
Order 조회시 Member를 fetch join 하면Member 와 1:1관계인 MemberDetail 조회 쿼리가 즉시 수행됩니다.
제가 작성한 예제 코드도 공유해드리겠습니다. 테스트 코드에 있는 테스트 케이스를 실행 시켜보시면 조회쿼리를 확인하실수 있습니다.
git clone https://sangholee_dev@bitbucket.org/sangholee_dev/one-to-one-test.git
추가로 이건 강의 범주를 넘어서는 질문같긴한데 테이블 설계시 1:1 관계가 옳은 설계인지 궁금합니다.
영한님은 혹시 실무에서 성향이 다른 데이터를 저장할때 정규화하여 1:1 관계로 설계하시는지 아니면 테이블은 분리하지 않고 객체만 나눠서 처리하시는지 궁금합니다.
답변 2
1
감사합니다. 강의 질문 답변을 조금 더 찾아봤어야 했네요.
실무에서 혼자 해결 할때는 default_batch_fetch_size 를 사용하는 것처럼 문제가 있는 1:1 관계로 매핑되어있는 엔티티들을 전부 fetch join 해서 쿼리가 한번만 더 수행되게 처리했습니다.
위 관계로 말씀드리면 Order를 조회하고 Member, MemberDetail, ProfileImage를 페치조인해서 Order에 member의 id로 찾아 넣어주는식으로 해서 1+1로 쿼리가 수행되게 했는데 알려주신 방법 5가지로 다시 한번 생각해보겠습니다.
그리고 테이블설계도 다시한번 생각해보겠습니다.
감사합니다.
0
안녕하세요. 상호님 좋은 질문입니다^^
JPA 단골 질문중에 하나인데요. 다음 링크를 확인해주세요^^
https://www.inflearn.com/questions/40670
감사합니다.
강의 관련 외 질문입니다.
0
64
2
SpringBoot4 + Hibernate7 모듈 등록 방법 공유
0
85
1
BeanCreationException
0
86
3
Update 후 UpdateMemberResponse 매핑할 때
0
46
1
트랜잭션을 사용 안 할 때 커넥션은 언제 가져오나요?
0
97
2
페이징 + 검색조건 관련해서 질문드립니다.
0
70
1
Query Dsl Q파일 질문입니다.
0
81
1
루트 쿼리라는것은
0
58
1
메서드를 분리하는 기준
0
61
1
findAllWithMemberDelivery 메서드 질문드립니다.
0
108
3
연관관계 매핑을 안 쓸 경우, 사용해야 하는 전략
0
83
2
fetch join과 영속화와 OSIV의 관계
0
83
2
Distinct 사용 전 결과에 대한 의문
0
113
2
레포지토리 계층에서의 트랜잭션에 대한 의문
0
55
1
영속성 컨텍스트 생명주기의 신기한 부분이 있습니다.
0
77
2
dto 필드 속 엔티티 여부
0
58
1
뷰템플릿 사용 시
0
76
2
Result 클래스 관련 질문
0
56
1
@PostConstruct 프록시 관련 질문드립니다
0
85
1
DTO 대신 Form 사용은 안되나요?
0
133
1
OSIV ON 상태일 때
0
95
1
fetch join VS fetch join 페이징 궁금증
0
179
2
양방향 연관관계 알아보는 법?
0
104
1
16강 17강 간단 정리 이게 맞을까요 ?
0
165
2





