인프런 커뮤니티 질문&답변
Qhello와 EntityManager 오류 질문
해결된 질문
작성
·
1.1K
0
버전은 3.0.9를 사용하였습니다.
Querydsl 부트 3.x 설정을 따라하여
build.gradle은 이렇게 설정하였습니다.
plugins {
   id 'java'
   id 'org.springframework.boot' version '3.0.9'
   id 'io.spring.dependency-management' version '1.1.2'
}
group = 'study'
version = '0.0.1-SNAPSHOT'
java {
   sourceCompatibility = '17'
}
configurations {
   compileOnly {
      extendsFrom annotationProcessor
   }
}
repositories {
   mavenCentral()
}
dependencies {
   implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
   implementation 'org.springframework.boot:spring-boot-starter-web'
   implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0'
   compileOnly 'org.projectlombok:lombok'
   runtimeOnly 'com.h2database:h2'
   annotationProcessor 'org.projectlombok:lombok'
   testImplementation 'org.springframework.boot:spring-boot-starter-test'
   implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
   annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
   annotationProcessor "jakarta.annotation:jakarta.annotation-api"
   annotationProcessor "jakarta.persistence:jakarta.persistence-api"
}
tasks.named('test') {
   useJUnitPlatform()
}
clean {
   delete file('src/main/generated')
}build->clean을 하고 build->compileJava를 하니
이런식으로 build에 Hello와 QHello가 같이 생겼습니다. (QuerydslApplication 까지) 그후 테스트를 다음과 같이 작성하였는데
package study.querydsl;
import com.querydsl.jpa.impl.JPAQueryFactory;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.annotation.Transactional;
import study.querydsl.entity.Hello;
import static org.assertj.core.api.Assertions.*;
@SpringBootTest
@Transactional
class QuerydslApplicationTests {
   @PersistenceContext
   EntityManager em;
   @Test
   void contextLoads() {
      Hello hello = new Hello();
      em.persist(hello);
      JPAQueryFactory query = new JPAQueryFactory(em);
      QHello qHello = new QHello("h");
      Hello result = query
            .selectFrom(qHello)
            .fetchOne();
      
      assertThat(result).isEqualTo(hello);
      //lombok 동작 확인 (hello.getId())
      assertThat(result.getId()).isEqualTo(hello.getId());
   }
}여기서 첫번째 질문은 @Autowired를 사용하였을 때
EntityManager em; 에서 em에 빨간줄이 뜨며 자동 주입을 할 수 없습니다. 'EntityManager' 타입의 bean을 찾을 수 없습니다 라는 오류가 발생 합니다. @Autowired대신 @PersistenceContext를 사용하면 해당 오류가 뜨지 않습니다. 왜 이런건가요?
두번째 질문은 심볼 'QHello'을(를) 해결할 수 없습니다 오류가 발생합니다. 빌드에서 QHello와 Hello가 같이 생겨서 그럴까요?
다른분들 질문들에 달린 답변들을 보고 따라해보았지만 해결이 되지 않습니다ㅜ
답변 1
1
안녕하세요. 곰인님
다음 링크에 있는 답변을 참고해서 한번 진행해보시겠어요?
https://www.inflearn.com/questions/958249
만약 그래도 안된다면
실제 동작하는 전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.
구글 드라이브 업로드 방법은 다음을 참고해주세요.
주의: 업로드시 링크에 있는 권한 문제 꼭 확인해주세요
추가로 다음 내용도 코멘트 부탁드립니다.
1. 문제 영역을 실행할 수 있는 방법
2. 문제가 어떻게 나타나는지에 대한 상세한 설명
감사합니다.






답변 감사합니다.