inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바 ORM 표준 JPA 프로그래밍 - 기본편

PK 가 아닌 컬럼으로 Join 할 경우에 N+1 문제

해결된 질문

444

woongs00

작성한 질문수 1

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 가 불가능한 것일까요??

https://stackoverflow.com/questions/30082281/manytoonefetch-fetchtype-lazy-doesnt-work-on-non-primary-key-referenced-co

 

만약 불가능하다면 이런 상황에서 N + 1 문제를 해결할 수 있는 best practice 는 무엇일까요??

 

 

java JPA

답변 2

2

y2gcoder

안녕하세요. 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

woongs00

답변 감사드립니다

벌크연산에서 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

105

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