문제해결

JPA OneToOne LAZY 미적용 문제

Meluu_ 2025. 8. 10. 23:21

JPA를 사용해서 Member를 조회하는데

이상하게 fetch LAZY로 설정한 연관관계 엔티티까지 전부 left join으로 가져오는 현상이 발생했다.

 

 

도저히 모르겠어서 인터넷을 좀 찾아본 결과 한 블로그에서 해답을 찾을 수 있었다.

 

OneToOne 연관관계에 해당하는 문제였다.

OneToOne은 연관관계 주인은 연관관계 대상 엔티티의 key를 알고있지만

대상인 엔티티는 연관관계 주인의 key 값을 알 수 없다.

 

따라서 Member는 연관관계 주인인 SocialToken 이나 Level_exp 의 키 값을 알 수 없기에

각각 select 쿼리를 보내야하는데 JPA가 최적화하여 한번에 조인해서 가져오는 것이다. 

즉, 이때문에 LAZY로 설정해도 무시되고 EAGER로 처리되는 것이다.

 

해결방법은 단방향 사용 or OneToMany로 설정

단방향으로 사용하는 것이 나아보인다. 

아니면 그저 EAGER로 사용해야한다.

 

 

 

아래 글을 읽고 다시한번 JPA에 대해서 공부하게 되었다.. 까먹지말자

 

https://medium.com/@gunhong951/jpa-onetoone-양방향-연관관계에서-나는-lazy-전략을-적용했다-그런데-왜-lazy로딩이-안되고-eagle-로딩이-되는-것인가-c9710dc82257

 

[JPA] @OneToOne 에 지연 로딩을 적용했지만, 왜 지연 로딩이 안되고 즉시 로딩이 되는 걸까요?

프로젝트를 진행하며 쿼리를 살펴보던 중 이상한 점을 발견한 적이 있습니다. 분명 A와 B 라는 서로 다른 엔티티의 연관관계 로딩전략을 Lazy 로 하였는데, 왜 A객체를 조회할 때 B객체도 함께 로

medium.com