728x90
반응형

Reason: Validation failed for query for method public abstract 오류

jpql 쿼리 작성 중 만난 에러 

@Query(value = "select new com.test.dto.OrderDto(u.name) " +
                "from Order o " +
                "join User u on u.userSeq = o.userSeq " +
                "where 1=1 " +
                "and (:userSeq = null or :userSeq = '' or o.userSeq = %:request.userSeq%")
List<OrderDto> getOrderList(Long userSeq);

 


원인

안정적이지 않은 쿼리여서 발생 

살펴보니 like 검색시 % 넣어준걸 복사해서 사용하다 보니 = 검색인데 %이 남아있어서 발생한 에러였음

 


해결 방법

1. 쿼리 자세히 살펴보고 쿼리문 잘못 적은 부분 없는지 확인하기

예시

@Query(value = "select new com.test.dto.OrderDto(u.name) " +
                "from Order o " +
                "join User u on u.userSeq = o.userSeq " +
                "where 1=1 " +
                "and (:userSeq = null or :userSeq = '' or o.userSeq = :request.userSeq")
List<OrderDto> getOrderList(Long userSeq);

 

2. 혹은 select 절을 dto로 받지 않는다면 nativeQuery = true 조건을 추가해 볼 것

예시 

@Query(value = "select new com.test.dto.OrderDto(u.name) " +
                "from Order o " +
                "join User u on u.userSeq = o.userSeq " +
                "where 1=1 " +
                "and (:userSeq = null or :userSeq = '' or o.userSeq = :request.userSeq", nativeQuery=true)
List<OrderDto> getOrderList(Long userSeq);
반응형
복사했습니다!