2012-04-02 30 views
9

मुझे हाइबरनेट और मानदंडों के साथ समस्या है। मैं दो वर्गों है:हाइबरनेट: संग्रह के साथ मानदंड

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

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

मैं अब एक तरीका है जिसके नाम के साथ स्थानों की एक सूची देता है मापदंडों में दिया जाता है और जैसे नाम के एक सड़क मापदंडों में दी गई की तरह लिखना चाहते हैं।

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

एक और तरीका है:

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

पिछले रास्ता:

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

मुझे आशा है कि आप मेरी समस्या को समझ सकता हूँ

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

मैं अंतिम चरण के लिए अलग अलग तरीकों की कोशिश की और मेरी बुरी अंग्रेजी के लिए खेद है :(

मैं दो दिनों के लिए एक समाधान के लिए खोज की है और मैं कैसे पर जाने के लिए नहीं पता ...

अभिवादन के रूप में जर्मनी :) फिलिप

+0

क्या त्रुटियों विशेष जब में, आप मिलता है आखिरी तरीके से उपयोग कर रहे हैं? – darrengorman

+0

कोई त्रुटि नहीं थी, लेकिन लौटाई गई सूची का आकार लगभग 300 और केवल एक स्थान था, इसलिए उदाहरण के लिए उस सूची में 'म्यूनिख' स्थान 300 गुना हुआ। अब मुझे पता है, जहां समस्या थी: मैंने सड़क के नाम को खाली करने की इजाजत दी, इसलिए 'म्यूनिख' में हर सड़क के लिए सूची में एक प्रविष्टि थी। –

उत्तर

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

आपको बहुत बहुत धन्यवाद। मेरे पास पहले भी यह समाधान था, लेकिन यह काम नहीं किया क्योंकि मैंने सड़क के नाम को खाली करने की इजाजत दी, इसलिए 'म्यूनिख' में हर सड़क के लिए सूची में एक प्रविष्टि थी। तो सूची हर जगह एक ही जगह से भरा था :) उस बेवकूफ गलती के लिए मुझ पर शर्म आती है :) –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^