inflearn logo
강의

講義

知識共有

本当!コトリンとスプリングブートで図書館アプリケーションを開発する(Javaプロジェクトリファクタリング)

29強。 N+1問題を解決する方法! fetch join

-

141

작성자 없음

投稿した質問数 0

0

-

java spring kotlin spring-boot 리팩토링

回答 2

0

lannstark

안녕하세요! 🙂 언제든 다시 질문 올려주세요~ 감사합니다. 🙏

2

leedonggi

글 삭제하기가 없어서 당황스럽네요 그래도 감사합니다 ㅎㅎ..

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. 이동기님.

강의와 관련된 유저와 관련된 문제에 대해 질문 주셔서 감사합니다.

문제 설명 요약

하나의 유저가 여러 개의 책을 대출한 상황에서 JPQL 쿼리를 실행시 ‘user’ 테이블 엔트리 하나만 나온 이유에 대해 궁금해 하셨습니다. 이 현상은 JPA가 동일한 Primary Key를 가진 레코드를 하나의 객체로 인식하는 것과 관련이 있습니다.

원인 분석

JPA에서는 기본적으로 동일한 엔티티의 같은 식별자를 가진 객체를 동일 객체로 인식합니다. 이를 통해 영속성 컨텍스트에서 관리되는 여러 레코드가 동일한 객체로 처리되게 됩니다.

이 경우 SQL 쿼리가 실제로 동일한 결과를 중복해서 가져오게 되는 것을 방지하고, 엔티티의 중복 생성을 피하기 위해 JPA는 같은 식별자를 가진 엔티티를 한 객체로 취급합니다.

해결방법

사용하신 코드에서 distinct를 통해 중복을 제거하는 것은 올바른 접근입니다. 동일한 Primary Key를 가진 레코드를 하나의 객체로 처리하도록 강제하는 것은 JPA의 엔티티 관리 방식과 일맥상통합니다.

따라서 예시로 사용하신 쿼리는 JPA가 동일한 Primary Key를 가진 엔티티들을 하나의 객체로 인식하기 때문에, 결과가 정상적입니다.

이미지에서 보시는 것처럼 동일한 유저에 여러 책을 대출했을 때에도 JPA는 유저 엔티티를 중복해서 생성하지 않고 하나의 유저 엔티티로 관리합니다.

참고하세요

관련된 질문과 유사한 내용의 링크들은 다음과 같습니다. 자세한 참고를 원하시면 아래 링크들을 확인해 보세요:
- N + 1 문제 해결 fetch join 관련해서 질문드릴 것이 있습니다!
- 오류발생코드질문드립니다
- 31강 질문

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

안녕하세요 혹시 프론트 코드 제공받을 수 있을까요?

0

67

2

실행이 안되네요

0

65

2

프론트 영역 보는법

0

51

2

companion object

0

75

2

Custom 레프직토리 형식

0

56

2

Querydsl 도입

0

67

2

fetch join DISTINCT 중복제거

1

82

2

표준 예외와 커스텀 예외 사용 전략 질문

0

85

3

이 질문이 왜 없는지 이해가 안 되지만 문제 인식 및 해결 방법 남깁니다.

1

177

2

테스트를 위한 코드

1

105

2

프로젝트 실행 에러

0

150

2

PDF 문서에 오타가 있어서 알려드립니다.

1

102

1

enum질문

1

86

1

테스트 후 AfterEach 함수에서 나오는 쿼리

0

136

2

테스트 fixture

1

210

2

./gradlew test 실행시 인식할수 없다고 뜹니다.

0

140

1

test 코드 실행시 경고가 발생합니다.

0

140

1

13강 User Kotlin 변환중

2

169

3

'추가 - 코프링과 플러그인' 강의 7:46 allopen 관련 질문

2

174

1

4:28 build.gradle 수정 시 kotlin-reflect관련 implementation 추가 해야할까요?

0

310

3

junit import 불가

0

269

3

테스트 코드와 관련하여 질문이 있습니다.

1

216

1

hibernate가 select를 두번 하는 이유

0

237

1

intelliJ 최신버전과 kotlin 1.6버전 충돌. 빌드 오류

1

999

2