2009-11-27 14 views
7

हर बार, मुझे "org.hibernate.QueryException: डुप्लिकेट एसोसिएशन पथ: myAssociation" मिलता है। ऐसा इसलिए है क्योंकि जिन जटिल मानदंडों के साथ मैं काम कर रहा हूं वे कई स्थानों पर एक ही पथ को परिभाषित कर सकते हैं। मुझेएसोसिएशन द्वारा मानदंड प्राप्त करें

Criteria association = myCriteria.getAssociation("wax"); 
if(association == null) association = myCriteria.createCriteria("wax"); 

क्या ऐसा कोई तरीका है जिससे मैं जांच कर सकता हूं कि कोई संगठन पहले से मौजूद है या नहीं?

चीयर्स

Nik

+0

क्या आप चाहते हैं कि नाम पहले से नहीं लिया गया है, उम्मीद के बजाय क्वेरी में अद्वितीय उपनामों का उपयोग करने के लिए और अधिक समझदारी नहीं होगी? – skaffman

उत्तर

3

ऐसा करने के लिए मानदंड एपीआई के माध्यम से कोई तरीका नहीं है। हालांकि, यदि आपको वास्तव में ऐसा होने की आवश्यकता है, तो आप Map स्वयं को बनाए रख सकते हैं।

आप या तो:

  • प्रत्येक मापदंड उदाहरण के लिए एक नक्शा है, नेस्टेड मापदंड उपनाम से keyed।
  • एक वैश्विक मानचित्र है; इसकी कुंजी में घोंसले के मानदंडों और रूट से वर्तमान मानदंडों के पथ दोनों होना चाहिए।
+0

यूप, यही वह है जो मैंने किया, बस उन्हें चारों ओर रखते हुए। उन्हें देखने में सक्षम होने के लिए अच्छा होगा, हालांकि मुझे एक बहुत भयानक परीक्षण और रख-रखाव बचाएगा। :-) – niklassaers

5

वास्तव में आप उपनाम द्वारा सबक्रिटिरिया पा सकते हैं, लेकिन कोड प्रकाशित नहीं हुआ है (यानी मानदंड Impl कक्षा में)। नीचे मेरा उदाहरण देखें:

private Subcriteria getCritria(Criteria pCriteria, String pAlias) { 
    Iterator<Subcriteria> iter = ((CriteriaImpl)pCriteria).iterateSubcriteria(); 
    while (iter.hasNext()){ 
     Subcriteria sub = iter.next(); 
     if (pAlias.equals(sub.getAlias())){ 
      return sub; 
     } 
    } 
    return null; 
} 
+2

उत्कृष्ट समाधान !! – samz

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