query java jpa spring-boot spring-data-jpa jpql

java - query - order by jpa hibernate



¿Cuál es la alternativa de la cláusula LIMIT en JPQL? (4)

Como se indica en los comentarios, JPQL no admite la palabra clave LIMIT .

Puede lograrlo utilizando setMaxResults pero si lo que desea es solo un elemento, use getSingleResult - lanza una excepción si no se encuentra ningún elemento.

Entonces, tu consulta sería algo como:

TypedQuery<Student> 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

Estoy trabajando con la implementación de consultas PostgreSQL en JPQL.

Esta es una muestra de consulta psql nativa que funciona bien,

SELECT * FROM students ORDER BY id DESC LIMIT 1;

La misma consulta en JPQL no funciona,

@Query("SELECT s FROM Students s ORDER BY s.id DESC LIMIT 1") Students getLastStudentDetails();

Parece que la cláusula LIMIT no funciona en JPQL.

De acuerdo con la documentación de JPA, podemos usar setMaxResults/setFirstResult , ¿Alguien puede decirme cómo puedo usar eso en mi consulta anterior?


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 puede utilizar un argumento Pageable con su consulta en lugar de una cláusula LIMIT .

@Query("SELECT s FROM Students s ORDER BY s.id DESC") List<Students> 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(new PageRequest(0,1));

Ambos deben producir el mismo resultado, sin necesidad de recurrir a SQL simple.


Hola, por recuperar una 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();


Puedes usar algo como esto:

@Repository public interface ICustomerMasterRepository extends CrudRepository<CustomerMaster, String> { @Query(value = "SELECT max(c.customer_id) FROM CustomerMaster c ") public String getMaxId(); }