Hibernate:带有集合的标准

Phi*_*üch 9 java hibernate criteria restrictions

我有hibernate和标准的问题.我有两个类:

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

public class Street{
    long id;
    String name;
    Place place;
}
Run Code Online (Sandbox Code Playgroud)

我现在想要编写一个方法,该方法返回一个名称的列表,例如参数中给出的名称和一个名为like参数的街道.

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 + "%"
}
Run Code Online (Sandbox Code Playgroud)

我为最后一步尝试了不同的方法:

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

其他方式:

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));
Run Code Online (Sandbox Code Playgroud)

最后一种方式

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

我希望你能理解我的问题并抱歉我的英语不好:(

我搜索了两天的解决方案,我不知道怎么回事......

来自德国的问候:) Philipp

Joe*_*Joe 13

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
}
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢.我之前也有过这个解决方案,但它没有用,因为我允许街道名称为空,所以对于'慕尼黑'的每条街道,列表中都有一个条目.因此,每次在同一个地方的名单都充满:)对我这个愚蠢的错误感到羞耻:) (2认同)