Como faço consultas dinâmicas não usando o OR e sim AND mas somente se o valor da pesquisa não for nulo.
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Como faço consultas dinâmicas não usando o OR e sim AND mas somente se o valor da pesquisa não for nulo.
Fala, joão! Tudo bem contigo?
Desculpe a demora em dar um retorno
Essa alteração deve ser feita na Classe RelatorioFuncionarioDinamico trocando o or por and
List<Funcionario> funcionarios = funcionarioRepository
.findAll(Specification.where(SpecificationFuncionario.nome(nome))
.and(SpecificationFuncionario.cpf(cpf))
.and(SpecificationFuncionario.salario(salario))
.and(SpecificationFuncionario.dataContratacao(dataContratacao))
);
funcionarios.forEach(System.out::println);
}Nesse cenário, deverá ter uma atenção ao CPF, pois a condicional and só será aceita se todas as premissas forem verdadeiras.
Como o nome está buscando tudo o que vier antes e depois de uma letra colocada, o salario busca um valor maior que o inserido e a data também busca períodos maiores, veja que o cpf procura o valor exato da pesquisa. Se o cpf inserido não bater com o que está cadastrado no banco, não teremos nenhum retorno, mesmo se o restante dos argumentos estiver corretos!
Espero ter contribuído!
Um abraço e bons estudos