용로그
article thumbnail
[JPA] JPA에서 Fetch Join에 대한 On절을 지원하지 않는 이유
Spring Data/JPA 2023. 7. 29. 02:33

집사의고민 프로젝트에서 JPA를 사용하면서 알아본 Fetch Join시 유의해야 하는 부분들에 대해서 기술해보려고 합니다. 특히나 자주 사용하는 fetch join + on절에 대한 이슈를 모르거나 잘 기억이 나지 않으신다면 이해하고 넘어가는게 좋습니다. 우선 쿼리가 정상적으로 동작하는지와 어떤 쿼리가 발생하는지를 알아보기 위해 간단한 테스트 코드를 작성해보았습니다. PetFoodRepositoryImplTest @DataJpaTest @Import(QueryDslTestConfig.class) @Sql(scripts = {"classpath:truncate.sql", "classpath:data.sql"}) @AutoConfigureTestDatabase(replace = AutoConfigureTes..

article thumbnail
[Trouble Shooting] MultipleBagFetchException과 Defualt Batch Fetch Size
트러블 슈팅 2023. 7. 23. 21:12

JPA를 "잘" 사용하려고 Query를 개선하다 보면 한 번쯤은 만날 수밖에 없는 문제가 있습니다. 바로 MultipleBagFetchException인데요. 해당 문제는 2개 이상의 xToMany 관계에 대해서 Fetch Join을 사용할 때 발생합니다. JPA fetch join 특징은 다음과 같습니다. OneToMany, ManyToMany : 하나의 fetch join만 사용 가능(Set을 사용하는 경우 제외) ManyToOne, OneToOne : 여러개의 fetch join 사용 가능 그리고 해결할 방법들도 당연히 존재하는데요, 아래 문제는 당연하게도 fetch type(EAGER, LAZY)로 인한 N+1 문제를 해결하기 위해 발생한 문제이기 때문에 아래와 같이 해결할 수 있습니다. LAZY..