Hibernate Criteria-Abfrage über mehrere Objekte

pizza1234

Erfahrenes Mitglied
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:


Java:
	@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:

Java:
	@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
 
Hallo,

vielleicht hilft dir das hier ein wenig weiter:
Java:
  @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
 
Hi Tom,

perfekt, so gehts!
Für alle, die es interessiert, hier die Lösung:
Java:
	@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
 

Neue Beiträge

Zurück