Tengo un problema con la hibernación y los criterios. Tengo dos clases:Hibernate: Criterios con colecciones
public class Place{
long id;
String name;
Set<Street> streets;
}
public class Street{
long id;
String name;
Place place;
}
ahora quiero escribir un método que devuelve una lista de lugares con un nombre como figura en los parámetros y una calle con su nombre como el dado en los parámetros.
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 + "%"
}
He intentado diferentes maneras para que el último paso:
//streetList is a list of all streets named like streetname
crit.add(Restrictions.in("streets", streetList));
Otra forma:
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));
última forma:
crit.createAlias("place.streets", "street");
crit.add(Restrictions.like("street.name", streetname + "%"));
crit.setResultTransformer(DistinctResultTransformer.INSTANCE);
espero que puedan entender mi problema y perdón por mi mal inglés :(
he buscado una solución para dos días y no sé cómo seguir ...
Saludos :) formar Alemania Philipp
Qué errores se llega, en particular cuando usando la última manera? – darrengorman
No hubo ningún error, pero la lista devuelta tenía un tamaño de aproximadamente 300 y solo un lugar, por lo que, por ejemplo, el lugar "Munich" apareció 300 veces en esa lista. Ahora sé dónde estaba el problema: permití que el nombre de la calle estuviera vacío, por lo que para cada calle en "Munich" había una entrada en la lista. –