해결된 질문
작성
·
363
0
안녕하세요
JPA 강의를 수강하고 실무에 적용해보고 있는 개발자입니다.
테이블 구조상 테이블 간의 Join 이 PK 가 아닌 필드(userName)로 걸려있어서 아래와 같이 @JoinColumn Annotation 을 사용하여 PK 아닌 컬럼으로 조인되도록 사용하고있습니다.
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(referencedColumnName = "userName", name = "userName", updatable = false, insertable = false)
이렇게 사용하였을때 userName field 에 접근하지 않았음에도 불구하고 Join 이 걸린 Entity 를 읽어오기 위한 N + 1 문제가 발생하는 것을 확인하였는데요.
구글링 해보았을때 PK 가 아닌 필드로 조인을 시도할 경우에 LAZY Fetch 가 무시될 수 있다고 하는데 혹시 PK 가 아닌 필드로 Join 을 시도할 경우에 LAZY Fetch 가 불가능한 것일까요??
만약 불가능하다면 이런 상황에서 N + 1 문제를 해결할 수 있는 best practice 는 무엇일까요??
답변 2
2
안녕하세요. woongs00님, 공식 서포터즈 y2gcoder입니다.
알고계신 것처럼 pk가 아닌 것을 referencedColumnName로 지정하면 영속성 컨텍스트의 도움을 받기 힘듭니다.
해당 프로젝트에 대해 자세히 알지 못하는 상황에서 N+1을 해결하는 방법 중에 추천드리는 것은 @BatchSize를 이용하는 것입니다. 해당 부분은 영한님의 JPA활용 2편( https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-JPA-API%EA%B0%9C%EB%B0%9C-%EC%84%B1%EB%8A%A5%EC%B5%9C%EC%A0%81%ED%99%94 )을 수강하시길 추천드립니다.
감사합니다.
1