2011-02-27 4 views
10

Je veux écrire une instruction select mais ne peut pas comprendre comment écrire la clause where ...JPA requête de sélection avec clause where

Mon code:

CriteriaQuery query = entityManager.getCriteriaBuilder().createQuery(); 
query.select(query.from(SecureMessage.class)).where(); 

C'est dans une méthode que je passe une chaîne à. Je veux récupérer seulement les lignes qui correspondent à la valeur de la chaîne que je passe à la méthode.

+0

En réalité, ici rien n'est connecté à JSF en question. C'est une question de syntaxe JPA. – sergionni

Répondre

11

Si je comprends bien, le paramètre de méthode devrait être le paramètre de la requête.

Alors, devrait ressembler à:

Query query = entityManager.getCriteriaBuilder().createQuery("from SecureMessage sm where sm.someField=:arg1"); 
query.setParameter("arg1", arg1); 

arg1 - méthode paramètre String

+0

Cela n'a pas fonctionné pour moi mate ... en fait cette première ligne de vôtre ne compile même pas ..Si je supprime le getCriteriaBuilder() il compile mais n'exécute toujours pas la requête..throws javax.faces.el.EvaluationException: javax.ejb.EJBException – mixkat

18

Dans Criteria c'est quelque chose comme:

CriteriaBuilder cb = entityManager.getCriteriaBuilder(); 
CriteriaQuery<SecureMessage> query = cb.createQuery(SecureMessage.class); 
Root<SecureMessage> sm = query.from(SecureMessage.class); 
query.where(cb.equal(sm.get("someField"), "value")); 

En JPQL:

Query query = entityManager.createQuery("Select sm from SecureMessage sm where sm.someField=:arg1"); 
query.setParameter("arg1", arg1); 

Voir, http://en.wikibooks.org/wiki/Java_Persistence/Querying#Criteria_API_.28JPA_2.0.29

Questions connexes