Define a named parameter (:status
) in a named query:
import javax.persistence.*; @Entity @Access(AccessType.FIELD) @Table(name = PartnerInitialLoad.TABLE_NAME) @NamedQueries({ @NamedQuery( name = FIND_PARTNER_BY_STATUS , query = "select p from PartnerInitialLoad p where p.status = :status order by p.partnernummer asc") }) public class PartnerInitialLoad { public static final String TABLE_NAME = "T_PARTNER_INITIAL_LOAD"; public static final String FIND_MAX_PARTNERNUMMER = "findMaxPartnernummer"; public static final String FIND_PARTNER_BY_STATUS = "findPartnerByStatus"; public static final String PARAM_STATUS = "status"; //the value here has to match the one in jpql, here "status" // further entity details emitted for brevity }
Then, set the named parameter in the created TypedQuery
(em.createNamedQuery
) with the setParameter
method, which expects the name of the parameter (should match the one defined in the @NamedQuery
) and its value:
@Stateless public class PartnerInitialLoadRepository { @Inject private EntityManager em; public List<PartnerInitialLoad> getPartnersByStatus(Integer chunkSize, String status) { var query = em.createNamedQuery(PartnerInitialLoad.FIND_UNPROCESSED_PARTNER, PartnerInitialLoad.class); query.setParameter(PartnerInitialLoad.PARAM_STATUS, status); query.setMaxResults(chunkSize); return query.getResultList(); } }
Same principle applies, if we create a collection-valued named parameters, to generate for example a SELECT IN
clause sql as in the following snippet:
public List<PartnerInitialLoad> getPartnersWithStatusInList(Integer chunkSize, List<String> statusList) { String sql="select p from PartnerInitialLoad p where p.status IN (:statusList) order by p.partnernummer asc" var query = em.createQuery(sql, PartnerInitialLoad.class); query.setParameter("statusList", status); query.setMaxResults(chunkSize); return query.getResultList(); }
Shared with ❤️ from Codever. Use 👉 copy to mine functionality to add it to your personal snippets collection.
Top comments (0)