ERLEDIGT
NEIN
NEIN
ANTWORTEN
2
2
ZUGRIFFE
1174
1174
EMPFEHLEN
-
Hi,
ich versuche eine SQL-Query so umzubauen, das ich die Criteria-API von Hibernate dazu benutzen kann. Mein Problem ist,das ich irgendwie keine mehrfachen Or-Querys hinbekomme. Geht das überhaupt?
Hier der SQl-Query:
Code :1 2 3 4 5 6 7 8
createSQLQuery("Select {privateAddresses.*} from private_addresses {privateAddresses} " + "where affiliate_id = "+id.intValue()+ " and (name like '"+search+"' " + " or city like '"+ search+"' " + " or street like '"+ search+"' " + " or email like '"+ search+"' " + " or url like '"+ search+"' " + " or zipcode like '"+search+ "')" ).addEntity("privateAddresses",PrivateAddresses.class).list();
und hier mein Criteria-Versuch, der leider so nicht funktioniert:
Code :1 2 3 4 5 6 7 8 9 10 11 12
DetachedCriteria crit = DetachedCriteria.forClass(PrivateAddresses.class); crit.add(Restrictions.and(Restrictions.eq("affiliateId", id.intValue()), Restrictions.or( Restrictions.like("name", search), Restrictions.like("street", search), Restrictions.like("email", search), Restrictions.like("url", search), Restrictions.like("zipcode", search), Restrictions.like("city", search) ) ) );
(Entschuldigt die Formatierung, aber ich hab den Code aus Eclipse kopiert und da sieht er vernünftig aus.)
Folgender Code mit nur 2 -Or-Verknüpfungen funktioniert, löst aber nicht mein Problem:
Code :1 2 3 4 5 6 7 8
crit.add(Restrictions.and(Restrictions.eq("affiliateId", id.intValue()), Restrictions.or( Restrictions.like("name", search), Restrictions.like("street", search) ) ) );
Vielleicht wißt ihr ja eine Lösung, bzw. würdet ihr überhaupt mit der Criteria-API arbeiten oder doch lieber mit HQL/SQL? Benutzt wird das Ganze übrigens für eine Suchmaske!
Grüße,
Peter
-
08.04.09 09:45 #2
Nur eine Vermutung: kann es sein, dass du mehrere ORs durch mehrere Restrictions.or angeben musst und nicht alle Kriterien in ein .or? Zumindest sieht das so etwas unnatürlich aus

Btw. ein static import von Restrictions.* würde den Code wesentlich übersichtlicher machen.
GrußIn theory, there is no difference between theory and practice. In practice, there is!
www.olivergierke.de
-
Gute Idee mit dem statischen Import! Ansonsten sind die Zauberwörter "disjunction" und "conjunction".
Hier die funktionierende und einigermaßen lesbare Lösung:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14
Criteria crit = getSession().createCriteria(PrivateAddresses.class); Disjunction or = disjunction(); or.add(like("name", search,MatchMode.START)) .add(like("address.street", search,MatchMode.START)) .add(like("telecommunication.email", search,MatchMode.START)) .add(like("telecommunication.url", search,MatchMode.START)) .add(like("address.zipcode", search,MatchMode.START)) .add(like("address.city", search,MatchMode.START)); Conjunction and = conjunction(); and.add(eq("affiliateId", id.intValue())) .add(or); crit.add(and);
Grüße,
Peter
Ähnliche Themen
-
Criteria: zwei criteria Objekte "oder-verknüpfen"?
Von RoCMe im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 0Letzter Beitrag: 25.05.10, 17:31 -
Hibernate Criteria-Abfrage über mehrere Objekte
Von pizza1234 im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 2Letzter Beitrag: 18.03.10, 10:02 -
Hibernate Criteria Javassist
Von langmar im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 6Letzter Beitrag: 27.08.09, 18:05 -
Fehler bei Hibernate Abfrage mit Criteria
Von toroe im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 1Letzter Beitrag: 07.07.09, 10:29 -
Spring und Hibernate (Criteria & Query by Example) problem
Von catarina im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 2Letzter Beitrag: 07.04.09, 14:42





Zitieren
Login





