Opa!!!! Tudo bom grande Francisco? Essa sua dúvida é algo que realmente acontece no dia a dia da gente, lá estamos criando um formulário que vai ter uns 10 campos e nenhum é obrigatório? No exemplo do curso como está sendo usado o operador "OR" não tem nenhum problema, mas no caso se fosse o "AND" ai chegaria na consulta o valor "NULL" e nos estariamos em apuros. A modificação que eu fiz foi a seguinte:
public class SpecificationFuncionario {
public static Specification<Funcionario> nome(String nome) {
return (root, criteriaQuery, criteriaBuilder) -> nome == null ? null
: criteriaBuilder.like(root.get("nome"), "%" + nome + "%");
}
public static Specification<Funcionario> cpf(String cpf) {
return (root, criteriaQuery, criteriaBuilder) -> cpf == null ? null
: criteriaBuilder.equal(root.get("cpf"), cpf);
}
public static Specification<Funcionario> salario(Double salario) {
return (root, criteriaQuery, criteriaBuilder) -> salario == null ? null
: criteriaBuilder.greaterThan(root.get("salario"), salario);
}
public static Specification<Funcionario> dataContratacao(LocalDate dataContratacao) {
return (root, criteriaQuery, criteriaBuilder) -> dataContratacao == null ? null
: criteriaBuilder.greaterThan(root.get("dataContratacao"), dataContratacao);
}
}
Se o valor vem "NULL" basta retornar no "NULL" se tem um valor diferente de "NULL" ai a gente faz a paradinha do criteriaBuilder.etc.etc.etc("algumacoisa");
Faz essa modificação no teu .properties ai também, ai tu consegue ver direitinho o SQL que tá sendo gerado, ai tu vai ver que se o valor chegar null ele nem aparece na consulta.
spring.jpa.show-sql=true
No caso se tu passar todos os valores "NULL" que é quando você não quer filtrar por nada o resultado vai ser o seguinte:
select funcionari0_.id as id1_1_, funcionari0_.cargo_id as cargo_id6_1_, funcionari0_.cpf as cpf2_1_, funcionari0_.data_contratacao as data_con3_1_, funcionari0_.nome as nome4_1_, funcionari0_.salario as salario5_1_ from funcionarios funcionari0_
OBS: Só lembrando que o double tem que ser "0" e não "NULL"
Espero ter ajudado e que a força esteja com você!!!!!