2017-07-03 3 views
0

J'utilise JPA et je veux écrire une requête de recherche pour récupérer tous les enregistrements si le champ de recherche est vide et si le paramètre de recherche n'est pas nul. .Sélectionner tous les enregistrements si le paramètre est null else retourner l'élément dans la requête JPA Criteria

CriteriaBuilder cb = entityManager.getCriteriaBuilder(); 
CriteriaQuery<String> cq = cb.createQuery(String.class); 
Root<String> query = cq.from(String.class); 
cq.where(cb.equal(query.get("id"), '1234567')); 

TypedQuery<String> q = entityManager.createQuery(cq); 
List<String> results = q.getResultList(); 
return results; 

Merci

+0

quel paramètre? un paramètre transmis à votre méthode? Dans ce cas, créez une requête Criteria différente en fonction du paramètre! –

Répondre

0

moi avons eu une solution finalement en utilisant l'API de critères. Jetez un oeil sur le code ci-dessous.

public List <Object> retrieveAll(Object obj) { 
    CriteriaBuilder cb = entityManager.getCriteriaBuilder(); 
    CriteriaQuery <Object> cq = cb.createQuery(Object.class); 
    Root <Object> objQuery = cq.from(Object.class); 

    List <Predicate> predicates = new ArrayList <Predicate>(); 

    // You can add as many as Predicate you want. 
    if (null != obj.getName() && !obj.getName().isEmpty()) { 
     predicates.add(cb.equal(objQuery.get("Name"), obj.getName())); 
    } 

    List <Object> results = new ArrayList <Object>(); 
    if (!predicates.isEmpty()) { 
     cq.select(objQuery).where(predicates.toArray(new Predicate[] {})); 
     cq.orderBy(cb.asc(objQuery.get("Name"))); 
     results = entityManager.createQuery(cq).getResultList(); 
    } else { 
     results = entityManager.createQuery("from Emplyee ORDER BY Name asc").getResultList(); 
    } 
    return results; 
}