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();