2012-04-02 38 views
9

Tôi gặp sự cố với chế độ ngủ đông và tiêu chí. Tôi có hai Lớp học:Hibernate: Tiêu chí có bộ sưu tập

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

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

Tôi bây giờ muốn viết một danh sách các địa điểm có tên như được đưa ra trong tham số và đường phố có tên như được đưa ra trong tham số.

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

tôi đã cố gắng nhiều cách khác nhau cho bước cuối cùng:

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

Một cách khác:

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

Cách cuối cùng:

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

Tôi hy vọng bạn có thể hiểu được vấn đề của tôi và xin lỗi vì tiếng anh xấu của tôi :(

Tôi tìm kiếm một giải pháp cho hai ngày và tôi không biết làm thế nào để đi về ...

Greetings mẫu Đức :) Philipp

+0

gì sai sót làm bạn nhận được, đặc biệt khi sử dụng cách cuối cùng? – darrengorman

+0

Không có lỗi, nhưng danh sách trả về có kích thước khoảng 300 và chỉ một nơi, ví dụ: địa điểm 'Munich' xảy ra 300 lần trong danh sách đó. Bây giờ tôi biết, nơi mà vấn đề là: Tôi cho phép tên đường phố trống, vì vậy đối với mỗi con phố trong 'Munich' có một mục trong danh sách. –

Trả lời

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 
} 
+2

Cảm ơn bạn rất nhiều. Tôi cũng đã có giải pháp này trước đây, nhưng nó không hoạt động vì tôi cho phép tên đường phố trống, vì vậy đối với mỗi con phố trong 'Munich' có một mục trong danh sách. Vì vậy, danh sách đã được đầy đủ của mọi thời gian cùng một nơi :) Xấu hổ về tôi cho rằng sai lầm ngu ngốc :) –

Các vấn đề liên quan