inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전! Querydsl

EntityManagerFactory를 활용한 페치조인 예제 에러(해결법있음 - 이유모름)

495

지원

작성한 질문수 1

0

환경

 

조인 - 페치 조인 강의를 듣던 중

이 부분 예제를 따라 하다가 보니

java.lang.illegalstateexception: specified field type [interface jakarta.persistence.entitymanagerfactory] is incompatible with resource type [jakarta.persistence.entitymanager]

이라는 exception이 발생했습니다.

강의에서 새로운 프로젝트를 생성하거나 파일을 생성하지 않았으므로 상단에

@PersistenceContext
EntityManager em; 

가 있고 추가적으로

@PersistenceContext
 EntityManagerFactory emf;

를 넣어주고 테스트 코드에서

emf.getPersistenceUnitUtil().isLoaded(findMember.getTeam());

를 실행하였습니다.

 

일단 entitymanagerfactory는 yml에 있는 설정을 바탕으로 1개가 생성되고 해당 factory에서 요청에 의해 entitymanager를 생성해서 제공하는 형태라는 글을 발견하여 추가적인 의존성 주입에서 2개의 factory 생성되는 이슈가 발생해서가 아닌가 추측을 하고 우선적으로는 사용중인 em에서 factory를 가져올 수 있길래 이렇게 접근했는데

em.getEntityManagerFactory().getPersistenceUnitUtil().isLoaded(findMember.getTeam());

정상작동은 하긴 하지만 강사님의 경우 추가적인 entitymanagerfactory 주입에도 테스트코드가 돌아갔으므로 정확한 동작 이유를 잘 모르겠어서 혹시 확실한 이유를 알 수 있을까 하여 문의합니다.

바탕

java jpa fetch querydsl entitymanager entitymanagerfactory

답변 2

0

solarrrrr1010

예제의 내용이 시간이 흘러 변경된 건지 모르겠으나

@PersistenceContext가 아니라

@PersistenceUnit 어노테이션을 사용하도록 돼 있네요.

저는 이렇게 했는데 emf.getPersistenceUnitUtil 사용 시
cannot resolve symbol... 오류가 떠서 검색 중이긴 합니다...

0

인프런 AI 인턴

안녕하세요 지원님, 인프런 AI 인턴이에요.
문의 주신 내용을 확인해보니, EntityManagerFactory를 활용한 페치조인 예제에서 발생한 에러에 대한 이유에 대해 질문하시는 거 맞으시죠?

일단, 예외 메시지를 보면 “field type [interface jakarta.persistence.entitymanagerfactory] is incompatible with resource type [jakarta.persistence.entitymanager]“라고 나와있는 것으로 보입니다.
이 예외는 EntityManagerFactory와 EntityManager의 타입이 호환되지 않는다는 의미입니다.

그런데 예제 코드에서는 @PersistenceContext 어노테이션을 통해 EntityManager와 EntityManagerFactory를 주입받고 있습니다. 일반적으로 EntityManager와 EntityManagerFactory는 다음과 같은 용도로 사용됩니다.

  • EntityManager: 실제로 엔티티의 영속성 컨텍스트를 관리하고 데이터베이스 작업을 수행하는 객체입니다.
  • EntityManagerFactory: EntityManager를 생성하기 위한 팩토리 객체로, 일반적으로 애플리케이션의 실행 시점에 한 번만 생성되고 재사용됩니다.

따라서 EntityManagerFactory는 EntityManager의 생성과 관련된 역할을 수행하기 때문에, EntityManagerFactory를 EntityManager와 함께 주입받는 것은 일반적인 상황에서는 필요하지 않을 수 있습니다.

만약 예제 코드에서 EntityManagerFactory를 주입받지 않고도 정상적으로 동작한다면, 고의적인 페치 조인 예제일 수 있으며 기본적으로는 EntityManager를 사용하여 페치 조인을 수행해야 합니다. 추가적인 EntityManagerFactory 주입에 대한 테스트와 관련하여, 정확한 동작 이유는 수업 내용과 상황에 따라 다를 수 있으며, 실제 애플리케이션이나 프레임워크의 설정에 따라 달라질 수 있습니다.

현재 강의에 대한 자세한 내용을 알지 못하므로 정확한 이유를 말씀드리기는 어렵습니다. 이해를 돕기 위해 추가적인 예제 코드나 강의자의 해설을 참고하시는 것을 추천드립니다. 또한, 해당 예제에 대한 질문이 있을 경우, 수업 커뮤니티나 강의자에게 문의해보시는 것도 좋을 것 같습니다.
감사합니다!

SpringBoot 4.X에서의 Querydsl 설정

0

153

2

querydsl 오픈소스에 대한 질문

1

100

1

예제에서의 카운트 쿼리에서 join문과 where문은 필요없지 않나요?

0

127

1

Querydsl 6.X버전에 대해서 어떻게 생각하시나요?

0

346

2

여러 테이블 조인하여 통계치를 구하고자 할 때 어떤 방법이 더 효율적일까요

1

86

1

fetchResults()는 더이상 권장되지 않는다는데 맞나요?

0

171

1

querydsl sum() 메서드 없어요.

0

168

2

build 디렉터리 생성

0

152

2

자바 ORM 표준 JPA 프로그래밍 - 기본편 듣고 바로 학습해도 괜찮을까요?

0

122

2

현재 Querydsl에서 from절 서브쿼리를 지원하나요?

0

99

1

오타 제보 드립니다.

0

79

2

벌크 연산과 flush, clear

0

84

1

Run As Intellij 로 변경시 Q타입 import 불가

0

95

1

QHello import하기 문제 발생

0

157

2

등록된 함수 보는법(H2Dialect) 질문

0

76

2

5.0부터 Querydsl은 향후 fetchCount() , fetchResult() 를 지원하지 않기로 결정했다고 하는데 이에 맞는 강의

1

207

2

[환경설정 PDF 부트 3.0이후 설명 질문] build.gradle에 compileQuerydsl을 정의하지 않은 상태에서 Gradle->Tasks->other->compileQuerydsl을 클릭하라고 하는 이유가 무엇인가요??

1

213

1

querydsl 설정 문제

0

228

2

quey dsl 설정부분

0

168

2

count 쿼리 관련 질문입니다!

0

79

1

stringtemplate를 이용하여 where절 검색 방법 질문 드립니다.

0

97

1

답변부탁드리겠습니다.

0

95

2

(OrderSpecifier)관련 내용 어디있을가요

0

68

1

중급문법 벌크연산에서

0

85

2