OneToOne 즉시 로딩에 대한 조언을 구합니다.
363
작성한 질문수 37
안녕하세요.
선생님 강의를 듣고 실무에서 JPA를 활용하고 있는 학생입니다.
현재 엔테티 구조가 OneToMany가 여러개가 있어서 동시에 fetch join을 2개 이상을 사용할 수 없는 상황입니다.[bag exception]
그래서 지연 로딩과 batch_size를 활용하고 있습니다.
여기서 문제가 발생했습니다. 지연 로딩으로 불러오는 부분에서 연관 관계의 주인이 아닌 NftProduct 엔티티에 OneToOne 관계가 있어 Membership 엔티티를 즉시 로딩[n+1 발생]합니다.
이런 경우에는 어떤식으로 풀어가는게 좋은 방법일지 궁금하여 질문드립니다.
구글링 했을 때는 MixFormula 엔티티의 List<MixMaterialFormula>의 결과 값을 조회하는 별도의 fetch join[MixMaterial, NftProduct, Membership] 쿼리를 호출하여 해결하는 방법도 있던데 어떤 방법이 좋은 방법일 지 궁금하여 문의드립니다.







답변 2
1
안녕하세요. 정민영님
이런 경우 상황에 따라서 다른데요.
1,2 번 방법 모두 고려해야 합니다. 그런데 보통 1번 방법이 DB에서 조회할 수 있는 데이터를 최소화 하기 때문에 가급적 1번 방법을 선택하게 됩니다. 필터링 할 데이터가 적거나 전체 데이터가 크지 않은 경우에는 2번 방법도 사용합니다.
1번 방법을 사용하면서 또 활용2편에서 설명드린 최적화를 적용하시길 바랍니다.
추가로 둘다 어려운 상황에서는 네이티브 쿼리도 고려하셔야 합니다. JdbcTemplate 사용 등등
감사합니다.
0
안녕하세요. 정민영님
다음을 참고해주세요.
https://www.inflearn.com/questions/40670
감사합니다.
0
선생님 보내주신 링크는 잘 읽어봤습니다.
제가 궁극적으로 궁금한 점은 하나의 jpql에서 OneToMany인 fetch join이 2개 이상일 경우 발생하는 MultipleBagFetchException을 해결하기 위한 default_batch_fetch_size을 사용했을 때 where 조건을 어떻게 넣는게 효율적인가를 고민하고 있습니다.
GrandParent란 메인 엔티티가 있고 그 밑에 OneToMany 연관 관계인 Parent 엔티티가 있고 또 그 밑에 OneToMany 연관 관계인 Child 엔티티가 있을 때 GrandParent와 Parent는 하나의 jpql로 가져오고 Child는 default_batch_fetch_size를 활용하여 지연 로딩으로 가져왔을 때 Child의 대한 where 조건을 어떻게 넣는게 좋을까 고민이 됩니다.
개인적으로 고민했을 때
Parent의 Id를 in 절에 넣고 다른 where 조건을 추가 후 자바 코드 상에서 조립을 하는 방법..[직접 코드로 짜야할지.. 하이버네이트에서 지연 로딩 시 where 조건을 추가할 수 있을까요?]
그냥 일반 적인 지연 로딩을 활용 후 자바 코드 상에서 조건들을 필터링 하는 방법
실무에서는 어떻게 해결하며, 더 좋은 방법이 있을지 궁금합니다.
벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?
0
58
2
inheritance startegy 선택시 고려사항
0
42
1
Entity 동등성 비교
0
47
1
실무 조언 관련 질문입니다.
0
68
1
H2데이터베이스 파일 생성
0
78
2
서브쿼리 강의에서 ALL 예시 관련 질문드립니다.
0
70
2
수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?
0
63
1
JPQL 메소드와 락
0
63
1
Delivery @OneToOne
0
71
1
17강 4~5분대 테이블 값 조회가 안됩니다.
0
104
2
UnsupportedOperationException 발생
0
97
3
H2 Database 연결이 안됩니다.
0
103
2
연관관계 매핑 질문드립니다.
0
95
2
h2데이터베이스 실행오류
0
116
2
persistence.xml
0
121
2
양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?
0
90
1
영속성 컨텍스트
0
77
1
JPA 프록시
0
107
1
Native Query와 MyBatis
0
83
1
영속성 컨텍스트는 어떤 메모리에 저장되는건가요?
0
97
1
임베디드 타입 예시 코드 관련 질문
0
126
3
명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요
0
103
3
인텔리제이 패키지 커서 단축키 질문
0
113
2
혹시 현재는 ID 데이터 타입이 String이면 안되나요?
0
156
1





