Ich habe ein Problem mit Ruhezustand und Kriterien. Ich habe zwei Klassen:Hibernate: Kriterien mit Sammlungen
public class Place{
long id;
String name;
Set<Street> streets;
}
public class Street{
long id;
String name;
Place place;
}
Ich möchte nun ein Verfahren schreiben, die eine Liste von Orten mit einem Namen wie in den Parametern angegeben zurückgibt 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 habe 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));
andere Art und Weise:
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));
letzte Weg:
crit.createAlias("place.streets", "street");
crit.add(Restrictions.like("street.name", streetname + "%"));
crit.setResultTransformer(DistinctResultTransformer.INSTANCE);
Ich hoffe, dass Sie mein Problem verstehen können und sorry für mein schlechtes Englisch :(
ich für eine Lösung für zwei Tage gesucht und ich weiß nicht, wie es weitergehen ...
Grüße Philipp :) Deutschland bilden
Welche Fehler haben Sie bekommen, insbesondere wenn den letzten Weg benutzen? – darrengorman
Es gab keinen Fehler, aber die zurückgegebene Liste hatte eine Größe von etwa 300 und nur einen Ort, so zum Beispiel der Ort 'München' 300 Mal in dieser Liste aufgetreten. Ich weiß jetzt, wo das Problem lag: Ich ließ den Straßennamen leer sein, also gab es für jede Straße in München einen Eintrag in der Liste. –