2010-11-17 14 views
6

no puedo encontrar la manera de crear una consulta de este tipo con los criterios de Hibernate synthaxHibernate criterios de consulta - condición anidada

select * from x where x.a = 'abc' and (x.b = 'def' or x.b = 'ghi') 

¿Tiene una idea de cómo hacerlo?
estoy usando métodos estáticos de hibernación de restricción pero no entender cómo especificar el 'o' condición anidado

Respuesta

13

Usted consulta específica podría ser:

crit.add(Restrictions.eq("a", "abc")); 
crit.add(Restrictions.in("b", new String[] { "def", "ghi" }); 

Si usted se pregunta acerca O e Ys en general, hacer esto:

// Use disjunction() or conjunction() if you need more than 2 expressions 
Disjunction aOrBOrC = Restrictions.disjunction(); // A or B or C 
aOrBOrC.add(Restrictions.eq("b", "a")); 
aOrBOrC.add(Restrictions.eq("b", "b")); 
aOrBOrC.add(Restrictions.eq("b", "c")); 

// Use Restrictions.and()/or() if you only have 2 expressions 
crit.add(Restrictions.and(Restrictions.eq("a", "abc"), aOrBOrC)); 

Ésta será equivalente a:

where x.a = 'abc' and (x.b = 'a' or x.b = 'b' or x.b = 'c') 
+0

muy útil gracias – mickthompson

1

utilizar una sintaxis más como (x.b IN ('def', 'ghi')).

Cuestiones relacionadas