restful query pagerequest pageable example data custom pagination jpa-2.0 criteria

pagination - query - Consulta de JPA para seleccionar según los criterios junto con la paginación



spring data pageable custom query (1)

Para todos los objetos de consulta JPA (excepto las consultas SQL nativas), usaría la paginación a través de los métodos setMaxResults (int) y setFirstResult (int). Por ejemplo:

return em.createNamedQuery("yourqueryname", YourEntity.class) .setMaxResults(noOfRecords) .setFirstResult(pageIndex * noOfRecords)); .getResultList();

JPA realizará la paginación por usted.

Las consultas con nombre solo están predefinidas y pueden almacenarse en caché, mientras que otros tipos se crean dinámicamente.
Entonces la elección es usar JPQL como:

Query query = em.createQuery("SELECT s FROM Submission s WHERE s.code = :code or s.id = :id ORDER BY s.id", Submission.class);

O api CriteriaBuilder para formar una consulta similar:

CriteriaBuilder qb = em.getCriteriaBuilder(); CriteriaQuery<Submission> cq = qb.createQuery(Submission.class); Root<Submission> root = cq.from(Submission.class); cq.where( qb.or( qb.equal(root.get("code"), qb.parameter(String.class, "code")), qb.equal(root.get("id"), qb.parameter(Integer.class, "id")) )); Query query = em.createQuery(cq);

No olvides establecer los valores de los parámetros usando query.setParameter ("id", sf.id) por ejemplo.

Tengo una tabla de envío con ID, Nombre, Código entre otras propiedades. Mi requisito es buscar registros basados ​​en las propiedades mencionadas y devolver un conjunto paginado.

Este es el pseudocódigo para lo que estoy buscando

searchSubmission(searchFilter sf,pageIndex,noOfRecords) { query = ''from submisssion where code=sf.code or id=sf.id order by id start_from (pageIndex*noOfRecords) limit noOfRecords'' return result(); }

Parece que hay muchas opciones: CriteriaBuilder, NamedQuery, etc. ¿cuál es la eficiente en esta situación?