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~~~"로 작성이 되 버린다. 

(엔터프라이즈 버전에서는 이런 것까지 빨간줄로 잡아 준다)