Hibernate: les Critères de collections

J'ai un problème avec hibernate et de critères. J'ai deux Classes:

public class Place{
    long id;
    String name;
    Set<Street> streets;
}

public class Street{
    long id;
    String name;
    Place place;
}

J'ai maintenant envie d'écrire une méthode qui renvoie une liste des endroits avec un nom comme donnée dans les paramètres et une rue portant le nom donné dans les paramètres.

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 + "%"
}

J'ai essayé de différentes façons pour la dernière étape:

//streetList is a list of all streets named like streetname
crit.add(Restrictions.in("streets", streetList));

D'une autre manière:

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

dernière manière:

crit.createAlias("place.streets", "street");
crit.add(Restrictions.like("street.name", streetname + "%"));
crit.setResultTransformer(DistinctResultTransformer.INSTANCE);

J'espère que vous pouvez comprendre mon problème et désolé pour mon mauvais anglais 🙁

J'ai cherché une solution pour deux jours et je ne sais pas comment faire pour aller sur...

Salutations forme de l'Allemagne 🙂
Philipp

Quelles erreurs avez-vous obtenir, en particulier lors de l'utilisation de ce dernier?
Il n'y a pas d'erreur, mais la liste retournée avaient une taille d'environ 300 et un seul endroit, de sorte que, par exemple, la place 'Munich' s'est produite 300 fois dans la liste. Je sais maintenant, où était le problème: j'ai permis à l'streetname être vide, donc, pour chaque rue, dans 'Munich' il y avait une entrée dans la liste.

OriginalL'auteur PhilippBüch | 2012-04-02