Hibernate: Kriterien mit Sammlungen

Ich habe ein problem mit hibernate und Kriterien. Ich habe zwei Klassen:

public class Place{
    long id;
    String name;
    Set<Street> streets;
}

public class Street{
    long id;
    String name;
    Place place;
}

Will ich jetzt schreiben, eine Methode, die gibt eine Liste von Orten mit Namen wie angegeben in den Parametern und eine Straße benannt wie in Parameter.

public List<Place> findPlaces(String name, String streetname){
    //getSession() gives me a hibernate session
    Criteria crit = getSession().createCriteria(Place.class, "place");
    crit.add(Restrictions.like("name", name+"%"));
    //Everything works fine until here
    //Last step: Sort out all places not containing a street named like streetname + "%"
}

Ich versucht, verschiedene Möglichkeiten für den letzten Schritt:

//streetList is a list of all streets named like streetname
crit.add(Restrictions.in("streets", streetList));

Einen anderen Weg:

DetachedCriteria strasseCrit = DetachedCriteria.forClass(Street.class, "street");
streetCrit.add(Restrictions.like("street.name", streetname + "%"));
streetCrit.createAlias("street.place", "streetPlace");
streetCrit.add(Restrictions.eqProperty("streetPlace.id", "place.id"));
streetCrit.setProjection(Projections.property("street.name"));
crit.add(Subqueries.exists(streetCrit));

letzten Weg:

crit.createAlias("place.streets", "street");
crit.add(Restrictions.like("street.name", streetname + "%"));
crit.setResultTransformer(DistinctResultTransformer.INSTANCE);

Ich hoffe, Sie verstehen mein problem und sorry für mein schlechtes Englisch 🙁

Suchte ich nach einer Lösung für zwei Tage, und ich weiß nicht wie es weiter gehen wird...

Grüße aus Deutschland 🙂
Philipp

  • Welche Fehler haben Sie, insbesondere wenn Sie mit dem letzten Weg?
  • Es war kein Fehler, aber der zurückgegebenen Liste hatte eine Größe von etwa 300 und nur einem Ort, so zum Beispiel der Ort, 'München' aufgetreten ist 300-mal in die Liste ein. Ich weiß jetzt, wo das problem war: ich darf die streetname leer zu sein, so dass für jede Straße in München " es war ein Eintrag in der Liste.
InformationsquelleAutor PhilippBüch | 2012-04-02
Schreibe einen Kommentar