ERLEDIGT
JA
JA
ANTWORTEN
2
2
ZUGRIFFE
1126
1126
EMPFEHLEN
-
Hi,
ich bekomme es einfach nicht hin, mit der Hibernate Criteria-API eine Oder -Abfrage über mehrere Objekte zu machen. Ich bekomme immer eine QueryException, obwohl ich schon sämtliche Varationen ausprobiert hab.
Die Doku zeigt mir auch leider nichts!
Hier mein letzter Versuch:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
@Override public List<Project> searchPojects(Affiliate affiliate, String search) { final DetachedCriteria criteria = DetachedCriteria.forClass(Project.class); Criterion title = like("title", "%"+search+"%").ignoreCase(); //like für Project criteria.createCriteria("tender").createCriteria("tenderComment"); // Verknüpfung von Project zu TenderComment über Tender Criterion tenderNumber = like("tenderNumber", "%"+search+"%").ignoreCase();//like für TenderComment //hier die Oder-Verknüpfung criteria.add(or(title, tenderNumber)); //Oder-Verbindung criteria.createCriteria("repository").add(eq("affiliate", affiliate)); return getHibernateTemplate().findByCriteria(criteria); }
Hier ist die (unschöne) funktionierende Alternative ohne Criteria:
Code java:1 2 3 4 5 6 7
@Override public List<Project> searchPojects(Affiliate affiliate, String search) { return getHibernateTemplate().find( "from Project p where p.title like ('%"+search+"%') or p.tender.tenderComment.tenderNumber like('%"+search+"%') and p.repository.affiliate = ?",new Object[]{affiliate}); }
Was mache ich falsch?
Grüße
Peter
-
17.03.10 21:50 #2
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.724
- Blog-Einträge
- 29
Hallo,
vielleicht hilft dir das hier ein wenig weiter:
Code java:1 2 3 4 5 6 7 8 9 10 11
@Override public Collection<Customer> findCustomerByEmailOrCountryName(String search) { Collection<Customer> customers = null; Session session = (Session) entityManager.getDelegate(); Criteria criteria = session.createCriteria(Customer.class); criteria.createAlias("contact.adresses", "adress"); criteria.createAlias("contact.emailAdresses", "emailAdress"); criteria.add(or(like("adress.countryName", search), like("emailAdress.email", search))); customers = criteria.list(); return customers; }
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
Hi Tom,
perfekt, so gehts!
Für alle, die es interessiert, hier die Lösung:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14
@Override public List<Project> searchPojects(Affiliate affiliate, String search) { final DetachedCriteria criteria = DetachedCriteria.forClass(Project.class); criteria.createAlias("tender.tenderComment", "tenderComment"); criteria.createAlias("repository", "repository"); criteria.add(or(like("title", "%"+search+"%").ignoreCase(),like("tenderComment.tenderNumber", "%"+search+"%").ignoreCase())); criteria.add(eq("repository.affiliate", affiliate)); return getHibernateTemplate().findByCriteria(criteria); }
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 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 -
Problem Oder-Verknüpfung Hibernate-Criteria
Von pizza1234 im Forum JavaAntworten: 2Letzter Beitrag: 08.04.09, 10:34 -
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




