Hibernate: критерии с коллекциями - PullRequest
9 голосов
/ 02 апреля 2012

У меня проблема с гибернацией и критериями. У меня есть два класса:

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);

Надеюсь, вы понимаете мою проблему и извините за мой плохой английский: (* ​​1016 *

Я два дня искал решение, и не знаю, как дальше ...

Привет из Германии :) Philipp

1 Ответ

13 голосов
/ 03 апреля 2012
public List<Place> findPlaces(String name, String streetname){
    Criteria crit = getSession().createCriteria(Place.class, "place");
    criteria.createAlias("streets", "s");  // Create alias for streets
    crit.add(Restrictions.like("s.name", name+"%"));
    // continue method
}
...