1
resposta

AULA 03 Consultas dinâmicas com Criteria API - as buscar não retornam nada

Ao finalizar a tarefa da aula 3, tentei fazer a pesquisa conforme o professor mas minha pesquisa não retorna nada.

Achando que alguma coisa poderia estar errada em meu código copiei o que estava na transcrição do vídeo e o problema continuou.

Alguém tem ideia se algo mudou desde o vídeo na implementação do Criteria API que seja crucial para o funcionamento?

De qualquer jeito, segue código:

public List<Produto> getProdutos(String nome, Integer categoriaId, Integer lojaId) {
        CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
        CriteriaQuery<Produto> query = criteriaBuilder.createQuery(Produto.class);
        Root<Produto> root = query.from(Produto.class);

        Path<String> nomePath = root.<String>get("nome");
        Path<Integer> lojaPath = root.<Loja>get("loja").<Integer>get("id");
        Path<Integer> categoriaPath = root.join("categorias").<Integer>get("id");

        List<Predicate> 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<Produto> typedQuery = em.createQuery(query);

        return typedQuery.getResultList();

    }
1 resposta

Habilita a propriedade show_sql para logar no console o sql gerado , copia a consulta e debuga em algum cliente sql.

Para facilitar a captura do sql , coloca um break point após a chamada do getResutList, e vc tb pode recuperar os valores dos objetos que serão utilizado na consulta com "inspection" dos objetos.

List<Produto> produtos =  typedQuery.getResultList(); 
return produtos;