2010-09-01 7 views
3

Si je veux quelque chose comme ça avec EclipseLink et JPA 2,0CriteriaBuilder JPA 2.0 EclipseLink

SELECT ... FROM ... WHERE nom1 = valeur1 ET nom2 = valeur2 OU NAME3 = value3

Quel est le meilleur moyen? Dans le oficial dire somthing comme:

cq.where(cb.equal(pet.get(Pet_.name), "Fido") 
    .and(cb.equal(pet.get(Pet_.color), "brown"); 

http://download.oracle.com/javaee/6/tutorial/doc/gjivm.html#gjiwu

mais est imposible avec EclipseLink parce cb.equal(pet.get(Pet_.name), "Fido") est un Predicate et non anidate requête avec .and

Toutes les idées?

Répondre

3

regardant l'API « et » et « ou » les opérateurs sont sur la CriteriaBuilder de sorte que la requête ressemblerait à ceci:

cq.where(cb.and(
    cb.equal(pet.get(Pet_.name), "Fido"), 
    cb.equal(pet.get(Pet_.color), "brown"))); 

En utilisant l'exemple « nom » où la clause de l'appel serait:

cq.where(cb.or(
    cb.and(cb.equal(BeanName_.name1, "value1"), 
    cb.equal(BeanName_name2, "value2")), 
    cb.equal(BeanName_.name3, "value3"))); 

si vous voulez utiliser des paramètres simplement remplacer les valeurs codées dur (ie "valeur1".) avec des paramètres:

cb.parameter(String.class, "value1"); 
Questions connexes