Ho un problema con l'ibernazione e i criteri. Ho due Classi:Ibernazione: criteri con le raccolte
public class Place{
long id;
String name;
Set<Street> streets;
}
public class Street{
long id;
String name;
Place place;
}
Ora voglio scrivere un metodo che restituisce un elenco di luoghi con un nome come dato nei parametri e una strada chiamata come dato in parametri.
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 + "%"
}
ho cercato diversi modi per l'ultimo passaggio:
//streetList is a list of all streets named like streetname
crit.add(Restrictions.in("streets", streetList));
Un altro modo:
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));
ultimo modo:
crit.createAlias("place.streets", "street");
crit.add(Restrictions.like("street.name", streetname + "%"));
crit.setResultTransformer(DistinctResultTransformer.INSTANCE);
Spero che tu possa capire il mio problema e mi dispiace per il mio cattivo inglese :(
ho cercato una soluzione per due giorni e non so come andare avanti ...
Saluti formare Germania :) Philipp
Quali errori non si ottiene, in particolare quando usando l'ultimo modo? – darrengorman
Non si sono verificati errori, ma l'elenco restituito aveva una dimensione di circa 300 e un solo posto, quindi ad esempio il posto "Monaco" si è verificato 300 volte in quella lista. Ora so, dove il problema era: ho permesso che lo streetname fosse vuoto, quindi per ogni strada di "Munich" c'era una voce nella lista. –