org.hibernate.QueryException: duplicate association path
की समस्या पर एक पुराना हाइबरनेट बग HHH-879 है 2005 को खोला गया और अभी भी खुला है...
अन्य समस्या समाधान के बिना बंद है HHH-7882
तो विकल्प 1) बल्कि उपयुक्त नहीं है।
लेकिन उपरोक्त बग की टिप्पणियों में एक उपयोगी समाधान exists
. का उपयोग करके उल्लेख किया गया है
इसलिए दो बार sqlRestriction
का इस्तेमाल करें exists
. के साथ और प्रॉपर श्रेणी को फ़िल्टर करने वाली एक सहसंबद्ध उपश्रेणी। आपको केवल कंपनियां मिलेंगी दोनों श्रेणियों से जुड़ा है।
crit.add( Restrictions.sqlRestriction(
"exists (select null from Company_Customercategory a where {alias}.company_Id = a.company_Id and a.CUSTOMERCATEGORYID = ?)",
1, IntegerType.INSTANCE ) );
crit.add( Restrictions.sqlRestriction(
"exists (select null from Company_Customercategory a where {alias}.company_Id = a.company_Id and a.CUSTOMERCATEGORYID = ?)",
6, IntegerType.INSTANCE ) );
यह निम्नलिखित क्वेरी की ओर जाता है जो सही परिणाम प्रदान करता है
select this_.COMPANY_ID as COMPANY_ID1_2_0_, this_.COMPANY_NAME as COMPANY_NAME2_2_0_
from COMPANIES this_
where exists (select null from Company_Customercategory a
where this_.company_Id = a.company_Id and a.CUSTOMERCATEGORYID = ?) and
exists (select null from Company_Customercategory a
where this_.company_Id = a.company_Id and a.CUSTOMERCATEGORYID = ?)