프로그래밍/JPA
[JPA] fetch LAZY인데 EAGER처럼 쿼리가 나갈 때
KOMAS
2022. 8. 20. 21:40
반응형
JPA 테스트 중에 분명 fetch LAZY로 설정했는데,
sql을 보니 LAZY Entity까지 조인을 하면서 마치 EAGER처럼 동작을 하는 문제가 있었다.
@OneToMany(mappedBy = "user1", fetch = FetchType.LAZY)
private List<UserParty> userParty;
@Test
void test9(){
itemRepository.findByItemNameLikeAndUser1_NameLike("%2", "c%").forEach(System.out::println);
System.out.println("-----");
// lazy 인데 왜 userParty 쿼리가 나갈까
}
itemRepository에서 user1을 사용하는 쿼리 메서드
User1 ---> UserParty는 분명 LAZY인데 마치 EAGER처럼 UserParty를 전부 가져왔다.
문제 상황은 [ Item ---> User1 ---> UserParty ] 까지 전이되어 전부가져옴
원하는 것은 [ Item ---> User1 ] 까지
해결은 단순했다.
@OneToMany(mappedBy = "user1", fetch = FetchType.LAZY)
@ToString.Exclude
private List<UserParty> userParty;
Entity 상단에 설정된 @ToString 때문에 getter가 동작하여 EAGER처럼 계속 조회해서 사용하는 것이었다.
@ToString.Exclude를 붙여서 getter를 호출하지 않게 설정하고 LAZY로 정상 작동되게 했다.
fetch LAZY 를 설정하면 ToString.Exclude 를 같이 사용
반응형