해결된 질문
작성
·
480
·
수정됨
0
QueryDSL 을 Test 하는데 계속 실패가 나고 해당 에러를 보니 아래와 같이 나옵니다.
java.lang.NullPointerException
at com.querydsl.jpa.impl.JPAProvider.getTemplates(JPAProvider.java:88)
at com.querydsl.jpa.impl.JPAQuery.<init>(JPAQuery.java:48)
at com.springboot.jpa.QueryDSLTest.queryDslTest(QueryDSLTest.java:19)
소스는 아래와 같이 구현을 했는데요 디버깅을 해보면 entityManager가 null 로 노출이 됩니다.
디버깅을 해보면 @PersistenceContext 을 붙히면 된다고 해서 했는데도 동일하게 에러가 나서 질문을 올려봅니다.
해당 테스트 코드 입니다.
import com.querydsl.jpa.impl.JPAQuery;
import com.querydsl.jpa.impl.JPAQueryFactory;
import com.springboot.jpa.data.entity.Product;
import com.springboot.jpa.data.entity.QProduct;
import org.junit.Test;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import java.util.List;
public class QueryDSLTest {
@PersistenceContext
EntityManager entityManager;
@Test
public void queryDslTest() {
JPAQuery<Product> query = new JPAQuery<>(entityManager); // QueryDSLTest.java:19
QProduct qProduct = QProduct.product;
List<Product> productList = query.from(qProduct)
.where(qProduct.name.eq("Kim"))
.orderBy(qProduct.price.asc())
.fetch();
for (Product product : productList) {
System.out.println(product.getName());
System.out.println(product.getPrice());
System.out.println(product.getStock());
}
}
}
답변 2
0
테스트 케이스 작성 시 @SpringBootTest 선언 후 실행한다.
EntityManager 생성이 될려면 Application이 실행이 되어야 하는데 위의 어노테이션을 붙히면 springboot 를 실행해야 한다.
0
안녕하세요 Kim Jeong Jin 님, 인프런 AI 인턴이에요.
위 상황에서 EntityManager가 Null을 반환하는 문제가 발생하고 있습니다. 이 문제는 스프링이 EntityManager를 주입하지 못해서 발생하는 문제일 수 있습니다.
해결책으로는 다음과 같은 점을 확인해볼 수 있습니다.
1. 테스트 클래스에 @RunWith(SpringRunner.class)를 추가하여 스프링 테스트 컨텍스트를 사용하고 있는지 확인해보세요.
2. 테스트 클래스에 @PersistenceContext 어노테이션을 사용하기 위해 @Autowired 어노테이션을 함께 사용해도 동일한 에러가 발생하는지 확인해보세요.
3. EntityManager를 주입받는 테스트 클래스가 스프링 컨텍스트에서 관리되는 빈으로 등록되어 있는지 확인해보세요.
위의 해결책들을 시도해보면서 문제를 해결할 수 있을 것입니다. 감사합니다!