tutorials.de Buch-Aktion 02/2012
ERLEDIGT
JA
ANTWORTEN
2
ZUGRIFFE
1126
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    pizza1234 pizza1234 ist offline Mitglied Gold
    Registriert seit
    Jan 2007
    Beiträge
    177
    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
     

  2. #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ß Tom
     
    Java 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

  3. #3
    pizza1234 pizza1234 ist offline Mitglied Gold
    Registriert seit
    Jan 2007
    Beiträge
    177
    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

  1. Criteria: zwei criteria Objekte "oder-verknüpfen"?
    Von RoCMe im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 0
    Letzter Beitrag: 25.05.10, 17:31
  2. Hibernate Criteria Javassist
    Von langmar im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 6
    Letzter Beitrag: 27.08.09, 18:05
  3. Fehler bei Hibernate Abfrage mit Criteria
    Von toroe im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 1
    Letzter Beitrag: 07.07.09, 10:29
  4. Problem Oder-Verknüpfung Hibernate-Criteria
    Von pizza1234 im Forum Java
    Antworten: 2
    Letzter Beitrag: 08.04.09, 10:34
  5. Spring und Hibernate (Criteria & Query by Example) problem
    Von catarina im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 2
    Letzter Beitrag: 07.04.09, 14:42