Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Predicate usando like

Por que a primeira instrução like com o "%" funciona e a segunda não funciona ? No vídeo a segunda funcionou mas só exibe com o nome completo (como esta o campo nome no banco de dados):

1 -Predicate nomeIgual = criteriaBuilder.like(nomePath, "%" + nome + "%"); 2 - Predicate nomeIgual = criteriaBuilder.like(nomePath, nome);

Código:

CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder(); CriteriaQuery query = criteriaBuilder.createQuery(Produto.class); Root root = query.from(Produto.class);

Path nomePath = root. get("nome"); Path lojaPath = root. get("loja"). get("id"); Path categoriaPath = root.join("categorias"). get("id");

List predicates = new ArrayList<>();

if (!nome.isEmpty()) { Predicate nomeIgual = criteriaBuilder.like(nomePath, nome); predicates.add(nomeIgual); } if (categoriaId != null) { Predicate categoriaIgual = criteriaBuilder.equal(categoriaPath, categoriaId); predicates.add(categoriaIgual); } if (lojaId != null) { Predicate lojaIgual = criteriaBuilder.equal(lojaPath, lojaId); predicates.add(lojaIgual); }

query.where((Predicate[]) predicates.toArray(new Predicate[0]));

TypedQuery typedQuery = em.createQuery(query); return typedQuery.getResultList();

1 resposta
solução!

Danyllo,

Para utilizar o LIKE onde um nome 'começa com' ou 'termina com' é necessário adicionar o '%'.

O '%' estando no inicio da palavra, significa que o nome precisa terminar com a palavra especificada. Ex: '%Silva', desta forma você vai consultar todas as pessoas que terminam com o nome 'Silva'.

O '%' estando no fim da palavra, significa que o nome precisa iniciar com a palavra especificada. Ex: 'Danyllo%', desta forma você vai consultar todas as pessoas que começam com o nome 'Danyllo'.

O '%' estando tanto no início quanto no fim da palavra, significa que o nome precisa conter a palavra especificada. Ex: '%Valente%', desta forma você vai consultar todas as pessoas que tem o nome 'Valente' como parte do nome.

Se você não especificar a porcentagem, de nada vai adiantar o like para consultar por parte de um nome. Para isto é necessário adicionar o '%'.

Att., Jonathan Pereira