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.
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