java Hibernate:集合的标准

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/9982823/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-30 23:08:25  来源:igfitidea点击:

Hibernate: Criteria with collections

javahibernatecriteriarestrictions

提问by PhilippBüch

I have a problem with hibernate and criterias. I have two Classes:

我有休眠和标准的问题。我有两个班级:

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

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

I now want to write a method which returns a list of places with a name like given in parameters and a street named like given in parameters.

我现在想编写一个方法,该方法返回一个地点列表,其名称类似于参数中给出的名称,而街道名称类似于参数中给出的名称。

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

I tried different ways for the last step:

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

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

Another way:

其他方式:

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

last way:

最后一种方式:

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

I hope you can understand my problem and sorry for my bad english :(

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

I searched for a solution for two days and I do not know how to go on...

找了两天的解决办法,不知道怎么办……

Greetings form Germany :) Philipp

来自德国的问候 :) 菲利普

回答by Joe

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
}