Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

387
Visualizações
Generador de criterios JPA para consultas dinámicas

Tengo que escribir un método donde le paso algunos argumentos y, dependiendo de qué argumentos estén vacíos, modifica la consulta que necesito ejecutar al final.

Por ejemplo, si quiero seleccionar de una tabla Customer que tiene ID , name , surname y address , la consulta inicial sería SELECT * FROM Customer WHERE ID=myId AND name=myName AND surname=mySurname (y ahora verificamos si la dirección que enviado está vacío, si NO lo está, agréguelo a la consulta).

Sé cómo hacer esto en C#, simplemente haciendo una cadena inicial y luego agregándola y usando ExecuteStoreQuery directamente, pero ¿cómo se vería esto en Java? ¿Es Criteria Builder una herramienta viable para esto?

¡Muchas gracias!

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Usando CriteriaQuery, es posible hacer algo así (usando Clases Metamodelo JPA Estáticas):

 public List<Customer> findCustomer(Long myId, String myName, String mySurName, String myAddress) { CriteriaBuilder cb = enitityManager.getCriteriaBuilder(); CriteriaQuery<Customer> query = cb.createQuery(Customer.class); Root<Customer> root = query.from(Customer.class); List<Predicate> predicates = new ArrayList<>(); predicates.add(cb.equal(root.get(Customer_.ID), myId)); predicates.add(cb.equal(root.get(Customer_.NAME), myName)); predicates.add(cb.equal(root.get(Customer_.SURNAME), mySurName)); if(address != null) { predicates.add(cb.equal(root.get(Customer_.ADDRESS), myAddress)); } query.select(root).where(cb.and(predicates.toArray(new Predicate[0]))); return entityManager.createQuery(query).getResultList(); }

En este caso, la dirección solo se comprobará si no es null .

Otro ejemplo sin usar Static JPA Metamodel (no estoy 100% seguro de esto):

 public List<Customer> findCustomer(Long myId, String myName, String mySurName, String myAddress) { CriteriaBuilder cb = enitityManager.getCriteriaBuilder(); CriteriaQuery<Customer> query = cb.createQuery(Customer.class); Root<Customer> root = query.from(Customer.class); List<Predicate> predicates = new ArrayList<>(); predicates.add(cb.equal(root.get("ID"), myId)); predicates.add(cb.equal(root.get("name"), myName)); predicates.add(cb.equal(root.get("surename"), mySurName)); if(address != null) { predicates.add(cb.equal(root.get("address"), myAddress)); } query.select(root).where(cb.and(predicates.toArray(new Predicate[0]))); return entityManager.createQuery(query).getResultList(); }
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda