Olá pessoal, Gostaria de saber como eu faço para o Criteria JPA não me retornar todos os campos das tabelas como mostra o exercícios. Quero aprender como informar quais serão retornados nessa mesma busca. Alguém me ajuda? Obrigado!!!
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Olá pessoal, Gostaria de saber como eu faço para o Criteria JPA não me retornar todos os campos das tabelas como mostra o exercícios. Quero aprender como informar quais serão retornados nessa mesma busca. Alguém me ajuda? Obrigado!!!
Oi Huender,
Segue um exemplo:
select p.nome, p.email, p.idade from Pessoa p
Só que isso vai te retornar uma List[Object[]], ou seja uma lista de Array de Object. Em cada um dos arrays vai ter o nome, email e idade. A JPA e suas implementações não suportam retornos parciais de entidades. Para melhorar você pode dar uma pesquisada por Constructor Expressions :).
Obrigado pela atenção, mas acho que eu me expressei mal. Quero saber na CriteriaAPI. exemplo do código:
public List getProduto(String nome, Integer categoriaId, Integer lojaId) {
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();
} Obrigado!!!
Opa, na verdade foi eu que li errado :).
Basta fazer assim:
query.multiselect(nomePath,lojaPath,categoriaPath);
Valeu Obrigado meu líder!! :)