2010-11-17 6 views
6

ich nicht herausfinden kann, wie eine Abfrage wie dieser mit Hibernate Kriterien erstellen SYNTHAXHibernate Criteria Abfrage - verschachtelter Zustand

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

Haben Sie eine Vorstellung davon, wie das zu tun?
Ich verwende Hibernate Restriction statische Methoden, aber ich verstehe nicht, wie der verschachtelten angeben ‚oder‘ Zustand

Antwort

13

Sie spezifische Abfrage sein könnte:

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

Wenn Sie über ANDs und OPs im Allgemeinen fragen sind, dies zu tun:

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

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

Dies wird zu entsprechen

+0

sehr hilfreich danke – mickthompson

1

Verwenden Sie eine Syntax mehr wie (x.b IN ('def', 'ghi')).

Verwandte Themen