CS 잡지식
JPQL 쿼리문 작성 시, 생길 수 있는 어이없는 에러
JIN_YOUNG _KIM
2023. 5. 4. 11:15
entityManager.createQuery(
"select" +
" new jpabook.jpashop.repository.OrderSimpleQueryDTO(o.id, m.name, o.orderDate, o.orderStatus, d.address)" +
" from Order o" +
" join o.member m" +
" join o.delivery d", OrderSimpleQueryDTO.class)
.getResultList();
[띄워쓰기]에 주의해 줘야 한다.
위 코드는 정상적인 코드이다.
아래의 코드를 보자.
public List<OrderSimpleQueryDTO> findOrderDTOs() {
// new OrderSimpleQueryDTO(매개변수) 연산자를 통해 JPQL에서 바로 DTO로 변환해서 반환받을 수가 있다.
return entityManager.createQuery(
"select" +
"new jpabook.jpashop.repository.OrderSimpleQueryDTO(o.id, m.name, o.orderDate, o.orderStatus, d.address)" +
" from Order o" +
" join o.member m" +
" join o.delivery d", OrderSimpleQueryDTO.class)
.getResultList();
}
이건 에러를 발생시키는 JPQL 쿼리문이다.
쿼리의 2번째 줄을 보면 new 앞에 [띄워쓰기]가 되어 있지 않다.
그러면 JPQL : "selectnew jpabook.jpashop.repository~~~"로 작성이 되 버린다.
(엔터프라이즈 버전에서는 이런 것까지 빨간줄로 잡아 준다)