У меня проблема с зимним спящим режимом и критериями. У меня есть два класса:Спящий режим: Критерии с коллекциями
public class Place{
long id;
String name;
Set<Street> streets;
}
public class Street{
long id;
String name;
Place place;
}
Я теперь хочу написать метод, который возвращает список мест, с именем, как дано в параметрах и улица, названная как дано в параметрах.
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 + "%"
}
Я пробовал различные способы для последнего шага:
//streetList is a list of all streets named like streetname
crit.add(Restrictions.in("streets", streetList));
Другой способ:
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));
последний путь:
crit.createAlias("place.streets", "street");
crit.add(Restrictions.like("street.name", streetname + "%"));
crit.setResultTransformer(DistinctResultTransformer.INSTANCE);
Я надеюсь, что вы можете понять мою проблему и извините за мой плохой английский :(
Я искал решение в течение двух дней, и я не знаю, как идти дальше ...
приветствий образуют Германии :) Philipp
Какие ошибки вы получаете, в частности, когда используя последний способ? – darrengorman
Ошибка не была, но возвращаемый список имел размер около 300 и только одно место, поэтому, например, место «Мюнхен» произошло 300 раз в этом списке. Теперь я знаю, где проблема: я допустил, что название улицы пустое, поэтому для каждой улицы в «Мюнхене» была одна запись в списке. –