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