Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Especificando quais campos serão retornados

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!!!

4 respostas

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!!!

solução!

Opa, na verdade foi eu que li errado :).

Basta fazer assim:

query.multiselect(nomePath,lojaPath,categoriaPath);

Valeu Obrigado meu líder!! :)