The repository implementations bring together the
JPA @NamedQuery
annotation
(see Section 5.2, “Annotating classes with
@NamedQuery
”) along with the
QueryDefault<T>
class (introduced in Section 5.1, “Background”).
For example, a CustomerRepository
implementation might be:
public class CustomerRepositoryJpa implements CustomerRepository { public List<Customer> findCustomerById(Integer id) { return firstMatch( QueryDefault.create( "findCustomerById", "id", id); } public List<Customer> findCustomersBySurname(String surname) { return allMatches( QueryDefault.create( "findCustomersBySurname", "surname", surname )); } ... }
The first argument for QueryDefault.create()
should
be the name of the query (it doesn't need to be the same as the method
name, but that's a sensible convention to follow). The remaining
arguments go in pairs, alternating between the parameter name and the
argument value. For example, the ":id" in the
@NamedQuery
annotation corresponds to the second
argument "id" in the call to QueryDefault.create()
.