Mam problem ze stanem hibernacji i kryteriami. Mam dwie klasy:Hibernate: Kryteria ze zbiorami
public class Place{
long id;
String name;
Set<Street> streets;
}
public class Street{
long id;
String name;
Place place;
}
teraz chcę napisać metodę, która zwraca listę miejsc z nazwą jak podano w parametrach i ulica nazwana jak podano w parametrach.
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 + "%"
}
Próbowałem różnych sposobów, za ostatni krok:
//streetList is a list of all streets named like streetname
crit.add(Restrictions.in("streets", streetList));
inny sposób:
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));
ostatni sposób:
crit.createAlias("place.streets", "street");
crit.add(Restrictions.like("street.name", streetname + "%"));
crit.setResultTransformer(DistinctResultTransformer.INSTANCE);
Mam nadzieję, że można zrozumieć mój problem i przepraszam za mój zły angielski :(
Szukałem rozwiązania dla dwóch dni i nie wiem, jak przejść na ...
Pozdrowienia z Niemiec :) Philipp
Co zrobić masz błędy, zwłaszcza gdy używając ostatniego sposobu? – darrengorman
Nie było błędu, ale zwrócona lista miała rozmiar około 300 i tylko jedno miejsce, więc na przykład miejsce "Monachium" pojawiło się 300 razy na tej liście. Teraz wiem, gdzie jest problem: pozwoliłem, by nazwa ulicy była pusta, więc na każdej ulicy w "Monachium" był jeden wpis na liście. –