Obrigado, não conhecia essas opções e gostei muito de usar ExampleMatcher
, só tive dificuldade na hora de lidar com valores do tipo int
.
Ao usar int
os valores foram iniciados automaticamente pelo Java com o valor 0
então minha query acabou ficando assim
Método com Matcher:
public List<ParceiroEntity> findBySearchDynamic(ParceiroRequestParams params){
ExampleMatcher matcher = ExampleMatcher.matching()
.withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING)
.withIgnoreCase()
.withIgnoreNullValues();
ParceiroEntity entity = new ParceiroEntity(
params.getCpf(),
params.getNome(),
params.getEstado()
);
return repository.findAll(Example.of(entity, matcher));
}
Query JPA:
select
pe1_0.cpf,
pe1_0.estado,
pe1_0.nome,
pe1_0.numero_funcionarios,
pe1_0.qtd_filiais,
pe1_0.uf
from
empresa pe1_0
where
lower(pe1_0.nome) like ? escape '\'
and pe1_0.qtd_filiais=?
and pe1_0.numero_funcionarios=?
Neste exemplo na API eu informei como parâmetro apenas o campo nome
mas o Java inicializou os dois campos e int
e minha query tentou buscar por qtd_filiais = 0
e numero_funcionarios=0
o que fez minha busca retornar nenhum registro.
Bastou trocar o tipo dos campos de int
para Integer
que agora ele consegue validar campos nulos e funcionou muito bem nos testes que fiz.
Query com os capos qtdFiliais
e numeroFuncionarios
como Integer
:
select
pe1_0.cpf,
pe1_0.estado,
pe1_0.nome,
pe1_0.numero_funcionarios,
pe1_0.qtd_filiais,
pe1_0.uf
from
empresa pe1_0
where
lower(pe1_0.nome) like ? escape '\'
Em resumo o código ficou muito mais conciso, vou estudar melhor para ver as opções que tenho com ExampleMatcher
mas se encaixou perfeitamente no que eu precisava.