public sealed interface OrderBy
Specifies an order by clause for entity queries.
OrderBy instances define how query results should be sorted, supporting multiple columns, ascending/descending order, null value handling, and case-insensitive sorting for strings.
OrderBy can be used in entity definitions as default ordering, or in queries for custom sorting:
public class Store extends DefaultDomain {
interface Customer {
EntityType TYPE = DOMAIN.entityType("store.customer");
Column<String> LAST_NAME = TYPE.stringColumn("last_name");
Column<String> FIRST_NAME = TYPE.stringColumn("first_name");
Column<LocalDate> BIRTH_DATE = TYPE.localDateColumn("birth_date");
Column<Boolean> ACTIVE = TYPE.booleanColumn("active");
}
void defineCustomer() {
// Default ordering for the entity
Customer.TYPE.define(
Customer.LAST_NAME.define()
.column(),
Customer.FIRST_NAME.define()
.column(),
Customer.BIRTH_DATE.define()
.column(),
Customer.ACTIVE.define()
.column())
.orderBy(OrderBy.builder()
.ascending(Customer.LAST_NAME, Customer.FIRST_NAME)
.build())
.build();
}
}
// Query usage examples
// Simple ascending sort
List<Entity> customers = connection.select(
Select.where(all(Customer.TYPE))
.orderBy(OrderBy.ascending(Customer.LAST_NAME))
.build());
// Multiple columns, mixed directions
List<Entity> customersByActiveAndName = connection.select(
Select.where(all(Customer.TYPE))
.orderBy(OrderBy.builder()
.descending(Customer.ACTIVE) // Active customers first
.ascendingIgnoreCase(Customer.LAST_NAME, Customer.FIRST_NAME) // Case-insensitive names
.build())
.build());
// With null handling
List<Entity> customersByBirthDate = connection.select(
Select.where(all(Customer.TYPE))
.orderBy(OrderBy.builder()
.ascending(OrderBy.NullOrder.NULLS_LAST, Customer.BIRTH_DATE)
.build())
.build());
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeInterfaceDescriptionstatic interfaceBuilds aOrderByinstance.static enumSpecifies how to handle null values during order by.static interfaceSpecifies an order by column and whether it's ascending or descending -
Method Summary
Modifier and TypeMethodDescriptionstatic OrderByCreates an ascending OrderBy for the given columns.static OrderBy.Builderbuilder()Creates aOrderBy.Builderinstance.static OrderBydescending(Column<?>... columns) Creates a descending OrderBy for the given columns.
-
Method Details
-
orderByColumns
List<OrderBy.OrderByColumn> orderByColumns()- Returns:
- the order by columns comprising this order by clause
-
builder
Creates aOrderBy.Builderinstance.- Returns:
- a
OrderBy.Builderinstance
-
ascending
Creates an ascending OrderBy for the given columns.// Single column ascending OrderBy byName = OrderBy.ascending(Customer.NAME); // Multiple columns ascending OrderBy byNameAndEmail = OrderBy.ascending(Customer.LAST_NAME, Customer.FIRST_NAME); // Usage in queries List<Entity> customers = connection.select( Select.where(all(Customer.TYPE)) .orderBy(OrderBy.ascending(Customer.LAST_NAME)) .build()); // Usage in entity definition as default ordering Customer.TYPE.define( Customer.LAST_NAME.define() .column(), Customer.FIRST_NAME.define() .column()) .orderBy(OrderBy.ascending(Customer.LAST_NAME, Customer.FIRST_NAME)) .build();- Parameters:
columns- the columns to order by ascending- Returns:
- a new ascending OrderBy instance based on the given columns
-
descending
Creates a descending OrderBy for the given columns.// Single column descending OrderBy byDateDesc = OrderBy.descending(Order.ORDER_DATE); // Multiple columns descending OrderBy byPriorityAndDate = OrderBy.descending(Task.PRIORITY, Task.DUE_DATE); // Usage - most recent orders first List<Entity> recentOrders = connection.select( Select.where(all(Order.TYPE)) .orderBy(OrderBy.descending(Order.ORDER_DATE)) .build()); // Combine with conditions List<Entity> recentCustomerOrders = connection.select( Select.where(Order.CUSTOMER_FK.equalTo(customer)) .orderBy(OrderBy.descending(Order.ORDER_DATE)) .build());- Parameters:
columns- the columns to order by descending- Returns:
- a new descending OrderBy instance based on the given columns
-