Estoy tratando de usar Spring Data JPA e hibernar en mi proyecto. Agregué la anotación @Query en el repositorio, tratando de escribir un hql con un argumento paginable pasado así:

@Query("select name,code,id from Region where fatherId is NULL or fatherId=''") Page<Region> findAllRoots(Pageable pageable);

Pero cuando traté de compilarlo y ejecutarlo, obtuve un token inesperado: donde se imprimió en la consola. La información completa es:

Caused by: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: where near line 1, column 14 [select count(where) from com.nitccs.demo.entity.Region where fatherId is NULL or fatherId='']

¿Cómo pudo funcionar así? Estoy totalmente confundido. ¿Por qué no es select count (id) o algo así? Estoy seguro de que no tengo ninguna variable nombrada en mi pojo.

1
Domingo 14 nov. 2017 a las 04:31

2 respuestas

La mejor respuesta

En su consulta anterior, lo está haciendo mal, está esperando name,code,i dy cómo se convertirá en el objeto Region

Si desea datos con paginación, intente usar SpringData specifications

haga clic aquí para echa un vistazo a esto

0
Musaddique 14 nov. 2017 a las 05:20

Necesita un alias en su consulta para que la consulta de recuento necesaria para que los Pageable resultados se creen correctamente. Entonces esto debería funcionar.

select r from Region r where r.fatherId is NULL or r.fatherId=''
2
Jens Schauder 14 nov. 2017 a las 07:19