Annotation Interface DefaultSortColumn
📊 Anotação para Ordenação Padrão Automática
Define automaticamente a ordenação padrão para consultas JPA quando nenhuma ordenação
explícita é fornecida via Pageable ou parâmetros de requisição.
🎯 Objetivo
Elimina a necessidade de especificar ordenação em cada consulta, fornecendo uma ordenação sensata e consistente por padrão para listagens e filtros.
⚙️ Como Funciona
- Detecção:
BaseCrudService.getDefaultSort()escaneia campos com esta anotação - Priorização: Campos são ordenados por prioridade (menor número = maior prioridade)
- Aplicação: Ordenação aplicada automaticamente quando
Pageable.getSort().isSorted() == false
📋 Parâmetros
- ascending:
true= ASC,false= DESC (padrão:true) - priority: Prioridade da ordenação - menor valor = maior prioridade (padrão:
0)
🔄 Exemplos de Uso
Ordenação Simples:
@Entity
public class Cliente {
@Id
private Long id;
@DefaultSortColumn // Ordenação alfabética por padrão
private String nome;
}
// Resultado: ORDER BY nome ASC (quando nenhum sort é especificado)
Ordenação Múltipla com Prioridades:
@Entity
public class Funcionario {
@DefaultSortColumn(priority = 1, ascending = true)
private String departamento;
@DefaultSortColumn(priority = 2, ascending = true)
private String nomeCompleto;
}
// Resultado: ORDER BY departamento ASC, nomeCompleto ASC
Ordenação por Data (Mais Recente Primeiro):
@Entity
public class Noticia {
@DefaultSortColumn(ascending = false)
private LocalDateTime dataPublicacao;
}
// Resultado: ORDER BY dataPublicacao DESC (notícias mais recentes primeiro)
🔗 Integração com APIs
Sem parâmetro sort (usa @DefaultSortColumn):
GET /api/funcionarios/all → Aplica ordenação: ORDER BY departamento ASC, nomeCompleto ASC
Com parâmetro sort (ignora @DefaultSortColumn):
GET /api/funcionarios/all?sort=salario,desc → Aplica ordenação: ORDER BY salario DESC
⚡ Aplicação Automática
A ordenação é aplicada automaticamente nos seguintes métodos:
GET /{resource}/all- Lista completa sem filtrosPOST /{resource}/filter- Lista filtrada com paginação- Qualquer método que use
BaseCrudService.findAll()
🎯 Benefícios
- UX Consistente: Usuários sempre veem dados organizados de forma lógica
- Performance: Evita scans desnecessários com ordenação inteligente
- Zero Configuração: Funciona automaticamente sem código adicional
- Flexível: Pode ser sobrescrita via parâmetros de requisição
⚠️ Considerações
- Usar apenas em campos indexados para melhor performance
- Prioridades devem ser únicas para ordem determinística
- Evitar ordenação por campos de relacionamentos profundos (N+1 queries)
- Since:
- 1.0.0
- See Also:
-
Optional Element Summary
Optional Elements
-
Element Details
-
ascending
boolean ascending- Default:
true
-
priority
int priority- Default:
0
-