JPA already defines a mechanism for defining
queries, with the @javax.persistence.NamedQuery
and @javax.persistence.NamedQueries
annotations.
In theory these can be annotated on any class, but by convention they go
on the class being returned.
For example, we might want to search for
Customer
s by their id
, or by
their surname
(family name):
@NamedQueries({ @NamedQuery(name="findCustomerById", query="from Customer where id=:id"), @NamedQuery(name="findCustomersBySurname", query="from Customer where surname=:surname"), }) @Entity @DiscriminatorValue("CUS") public class Customer { ... @Id public Integer getId() { ... } ... @Basic public String getFamilyName() { ... } ... }
These named queries are then referenced in the repository implementations, covered next (Section 5.3, “Repository Implementation”).