Module jakarta.data

Annotation Interface OrderBy


@Repeatable(List.class) @Retention(RUNTIME) @Target(METHOD) public @interface OrderBy

Annotates a repository method to request sorting of results.

When multiple OrderBy annotations are specified on a repository method, the precedence for sorting follows the order in which the OrderBy annotations are specified, and after that follows any sort criteria that are supplied dynamically by Sort parameters or by any Order parameter.

For example, the following sorts first by the lastName attribute in ascending order, and secondly, for entities with the same lastName, it then sorts by the firstName attribute, also in ascending order. For entities with the same lastName and firstName.

 @OrderBy("lastName")
 @OrderBy("firstName")
 @OrderBy("id")
 Person[] findByZipCode(int zipCode, PageRequest pageRequest);
 

The interpretation of ascending and descending order is determined by the database, but, in general:

  • ascending order for numeric values is the natural order with smaller numbers before larger numbers,
  • ascending order for string values is lexicographic order with A before Z, and
  • ascending order for boolean values places false before true.

A repository method with an @OrderBy annotation must not have:

  • the Query by Method Name OrderBy keyword in its name, nor
  • a @Query annotation specifying a JDQL or JPQL query with an ORDER BY clause.

A Jakarta Data provider is permitted to reject such a repository method declaration at compile time or to implement the method to throw UnsupportedOperationException.

A repository method will fail with a DataException or a more specific subclass if the database is incapable of ordering with the requested sort criteria.

  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    static @interface 
    Enables multiple OrderBy annotations on the method.
  • Required Element Summary

    Required Elements
    Modifier and Type
    Required Element
    Description
    Entity attribute name to sort by.
  • Optional Element Summary

    Optional Elements
    Modifier and Type
    Optional Element
    Description
    boolean
    Indicate whether to use descending order when sorting by this attribute.
    boolean
    Indicates whether or not to request case insensitive ordering from a database with case sensitive collation.
  • Element Details

    • descending

      boolean descending

      Indicate whether to use descending order when sorting by this attribute.

      The default value of false means ascending sort.

      Returns:
      whether to use descending (versus ascending) order.
      Default:
      false
    • ignoreCase

      boolean ignoreCase

      Indicates whether or not to request case insensitive ordering from a database with case sensitive collation. A database with case insensitive collation performs case insensitive ordering regardless of the requested ignoreCase value.

      The default value is false.

      Returns:
      whether or not to request case insensitive sorting for the property.
      Default:
      false
    • value

      String value

      Entity attribute name to sort by.

      For example,

       @OrderBy("age")
       Stream<Person> findByLastName(String lastName);
       
      Returns:
      entity attribute name.