Tengo una tabla con columnas presentación gusta ID
, Name
, Code
entre otras propiedades. Mi requisito es buscar registros basados en las propiedades mencionadas y devolver un conjunto paginado.
Este es el pseudocódigo de 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 como CriteriaBuilder
, NamedQuery
, etc., que es el más eficiente en esta situación?
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 están predefinidas y se pueden almacenar 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 de 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 olvide establecer los valores de los parámetros mediante query.setParameter ("id", sf.id), por ejemplo.
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras