2010-11-17 8 views
6

Je ne peux pas comprendre comment créer une requête comme celui-ci avec des critères Hibernate SynthaxHibernate Requête - état imbriqué

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

Avez-vous une idée de la façon de le faire?
J'utilise des méthodes statiques de restriction Hibernate mais je ne comprends pas comment spécifier le imbriquée « ou » état

Répondre

13

Vous requête spécifique pourrait être:

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

Si vous vous interrogez sur ANDs et ORS en général, faites ceci:

// 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)); 

Ce sera équivalent à:

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

très utile merci – mickthompson

1

Utilisez une syntaxe plus comme (x.b IN ('def', 'ghi')).