Después de consultar expertos en la materia, programadores de varias áreas y maestros dimos con la respuesta al problema y la dejamos plasmada en este post.
Solución:
Está utilizando JPQL, que no admite la limitación de resultados como este. Cuando use JPQL nativo, debe usar setMaxResults
para limitar los resultados.
Sin embargo, está utilizando Spring Data JPA, que básicamente lo hace bastante fácil de hacer. Consulte aquí en la guía de referencia sobre cómo limitar los resultados en función de una consulta. En su caso, el siguiente método de búsqueda haría exactamente lo que desea.
findFirstByOrderById();
También podrías usar un Pageable
argumento con su consulta en lugar de un LIMIT
cláusula.
@Query("SELECT s FROM Students s ORDER BY s.id DESC")
List getLastStudentDetails(Pageable pageable);
Luego, en su código de llamada, haga algo como esto (como se explica aquí en la guía de referencia).
getLastStudentDetails(PageRequest.of(0,1));
Ambos deberían arrojar el mismo resultado, sin necesidad de recurrir a SQL simple.
Como se indica en los comentarios, JPQL no admite el LIMIT
palabra clave.
Puedes lograrlo usando el setMaxResults
pero si lo que quieres es solo un artículo, entonces usa el getSingleResult
– lanza una excepción si no se encuentra ningún elemento.
Entonces, su consulta sería algo como:
TypedQuery query = entityManager.createQuery("SELECT s FROM Students s ORDER BY s.id DESC", Student.class);
query.setMaxResults(1);
Si desea establecer un desplazamiento de inicio específico, use query.setFirstResult(initPosition)
; también
Hola, por obtener una sola fila y usar LIMIT en jpql, podemos decirle a jpql si es una consulta nativa.
(usando – nativeQuery=true )
A continuación se muestra el uso
@Query("SELECT s FROM Students s ORDER BY s.id DESC LIMIT 1", nativeQuery=true)
Students getLastStudentDetails();
Te mostramos comentarios y valoraciones
Nos encantaría que puedieras comunicar esta sección si te valió la pena.