Module jakarta.data

Annotation Interface By


@Retention(RUNTIME) @Target(PARAMETER) public @interface By

Annotates a parameter of a repository method, specifying a mapping to a persistent field:

  • if a field name is specified, the parameter maps to the persistent field with the specified name, or
  • if the special value "#id" is specified, the parameter maps to the unique identifier field or property.

Arguments to the annotated parameter are compared to values of the mapped persistent field.

The field name may be a compound name like address.city.

For example, for a Person entity with attributes ssn, firstName, lastName, and address we might have:

 @Repository
 public interface People {

     @Find
     Person findById(@By(ID) String id); // maps to Person.ssn

     @Find
     List<Person> findNamed(@By("firstName") String first,
                            @By("lastName") String last);

     @Find
     Person findByCity(@By("address.city") String city);
 }
 

The By annotation is unnecessary when the method parameter name matches the entity attribute name and the application is compiled with the -parameters compiler option that makes parameter names available at runtime.

Thus, when this compiler option is enabled, the previous example may be written without the use of By:

 @Repository
 public interface People {

     @Find
     Person findById(String ssn);

     @Find
     List<Person> findNamed(String firstName,
                            String lastname);

     @Find
     Person findByCity(String address_city);
 }