I have a submission table with columns like ID
, Name
, Code
among other properties. My requirement is to search for records based on the me
For all JPA query objects (except for native SQL queries), you would use pagination through the setMaxResults(int) and setFirstResult(int) methods. For instance:
return em.createNamedQuery("yourqueryname", YourEntity.class)
.setMaxResults(noOfRecords)
.setFirstResult(pageIndex * noOfRecords)
.getResultList();
JPA will perform the pagination for you.
Named queries are just predefined and can be cached, while other types are dynamically created.
So the choice is to use JPQL like:
Query query = em.createQuery("SELECT s FROM Submission s WHERE s.code = :code or s.id = :id ORDER BY s.id", Submission.class);
Or CriteriaBuilder api to form a similar query:
CriteriaBuilder qb = em.getCriteriaBuilder();
CriteriaQuery cq = qb.createQuery(Submission.class);
Root 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);
Don't forget to set the parameter values using query.setParameter("id", sf.id) for example.