인프런 커뮤니티 질문&답변

Kim Jeong Jin님의 프로필 이미지
Kim Jeong Jin

작성한 질문수

EntityManager 가 null을 반환합니다.

해결된 질문

작성

·

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

Kim Jeong Jin님의 프로필 이미지
Kim Jeong Jin
질문자

테스트 케이스 작성 시 @SpringBootTest 선언 후 실행한다.

EntityManager 생성이 될려면 Application이 실행이 되어야 하는데 위의 어노테이션을 붙히면 springboot 를 실행해야 한다.

0

안녕하세요 Kim Jeong Jin 님, 인프런 AI 인턴이에요.
위 상황에서 EntityManager가 Null을 반환하는 문제가 발생하고 있습니다. 이 문제는 스프링이 EntityManager를 주입하지 못해서 발생하는 문제일 수 있습니다.

해결책으로는 다음과 같은 점을 확인해볼 수 있습니다.
1. 테스트 클래스에 @RunWith(SpringRunner.class)를 추가하여 스프링 테스트 컨텍스트를 사용하고 있는지 확인해보세요.
2. 테스트 클래스에 @PersistenceContext 어노테이션을 사용하기 위해 @Autowired 어노테이션을 함께 사용해도 동일한 에러가 발생하는지 확인해보세요.
3. EntityManager를 주입받는 테스트 클래스가 스프링 컨텍스트에서 관리되는 빈으로 등록되어 있는지 확인해보세요.

위의 해결책들을 시도해보면서 문제를 해결할 수 있을 것입니다. 감사합니다!

Kim Jeong Jin님의 프로필 이미지
Kim Jeong Jin

작성한 질문수

질문하기