`JPAQueryFactory` 에서 NPE 발생

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.querydsl.jpa.impl.JPAQueryFactory.query(JPAQueryFactory.java:138)
	at com.querydsl.jpa.impl.JPAQueryFactory.select(JPAQueryFactory.java:72)
	at com.querydsl.jpa.impl.JPAQueryFactory.selectFrom(JPAQueryFactory.java:102)
	at com.psj.itembrowser.order.repository.CustomOrderRepositoryImpl.selectOrdersWithPagination(CustomOrderRepositoryImpl.java:38)
	at com.psj.itembrowser.order.repository.CustomOrderRepositoryImpl$$FastClassBySpringCGLIB$$bd307390.invoke(<generated>)
	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)

가 발생했다.

@PersistenceContext
	private EntityManager em;
	
	private final JPAQueryFactory qf;
	
	public CustomOrderRepositoryImpl() {
		this.qf = new JPAQueryFactory(em);
	}
  • Qdsl 클래스는 요런식으로 초기화중이였는데
  • PersistenceContext 로 EM 을 주입하는 경우
    • 객체가 생성된 이후에, 즉, 생성자로 객체가 생성된 이후에 주입되며
    • qf에는 결국 null 값의 EntityManager 가 주입된다.

해결

@PostConstruct 을 사용하여 객체 생성이후에 주입받도록 설정

@PersistenceContext
private EntityManager em;

private JPAQueryFactory qf;

@PostConstruct
public void init() {
	this.qf = new JPAQueryFactory(em);
}


Uploaded by N2T