2010-01-26 17 views
6

के लिए डीएओ कोड कैसे लिखें, मेरा वर्तमान कार्यस्थल एक्सएमएल के माध्यम से अपने फ्लेक्स क्लाइंट को सामग्री प्रदान करने के लिए मानक स्प्रिंग/हाइबरनेट/जेएसपी मिश्रण का उपयोग करता है। डेटा के उपयोग के कई तरीके हैं, लेकिन सबसे प्रचलित एक डेटाबेस के लिए सीधे एसक्यूएल कॉल और एक्सएमएल में मैन्युअल रूपांतरण के माध्यम से है।जावा/हाइबरनेट: जटिल एसक्यूएल

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

मुझे पता है कि आमतौर पर जाने का सही तरीका है हाइबरनेट क्वेरी और इकाइयों का उपयोग करके आइटम लाने के लिए। हालांकि, हमारे कुछ अनुरोधों में परिणामों को एक ही हाइबरनेट इकाई में मैप नहीं किया जा सकता है और मुझे डर है कि सीधे SQL को उपयोग करने की आवश्यकता है।

इस बारे में जाने का सही तरीका क्या होगा? गतिशील एसक्यूएल प्रश्नों को अधिक सुगम बनाने का कोई तरीका है? क्या हाइबरनेट इकाइयों के साथ ऐसा करने का कोई तरीका है?

मुझे इस प्रश्न की अमूर्त प्रकृति के लिए खेद है। मुझे उम्मीद है कि आपके पास अच्छा इनपुट है;)

अपनी टिप्पणियों की सराहना करें!

उत्तर

3

एचक्यूएल उन प्रश्नों का समर्थन करता है जो एक से अधिक इकाई प्राप्त करते हैं। जॉइन भी समर्थित हैं। (! गैर इकाई) - उत्पाद और कीमत

SELECT new com.package.model.SearchResultEntry(product, price) FROM Product product, 
    IN(product.variantPrices) price WHERE .... 

ऊपर रिटर्न एक नया है कि दो संस्थाओं से बना है वस्तु: उदाहरण के लिए। आप एक ही परिणाम से अलग-अलग इकाइयों को रखने के लिए List का भी उपयोग कर सकते हैं।

this tutorial एक थोर पढ़ने दें।

डायनामिक पैरामीटर वाले इन प्रश्नों करें, और यह मानते हुए कि तुम क्या आप HQL में आवश्यकता ibatis पर एक नज़र डालें यह आप मैपिंग की स्थापना के लिए अनुमति देगा ऐसा नहीं कर सकते के रूप में @NamedQueries

2

आप डेटाबेस में से कुछ SQL-logic को स्थानांतरित करने और विचारों के माध्यम से डेटा तक पहुंचने पर विचार कर सकते हैं: यह निश्चित रूप से आपकी समस्याएं प्रस्तुत करता है (अब आपके पास दो स्थानों पर व्यवसाय तर्क है) लेकिन विचार करने योग्य हो सकता है।

+0

मैं यहां सहमत हूं, भले ही बहुत से लोग एसक्यूएल में संग्रहित प्रोसेस और लॉजिक से नापसंद करते हैं। यदि आपके पास वास्तव में जटिल SQL क्वेरी है, तो कोड में ऐसा करने की कोशिश करके या एचक्यूएल जैसी कम-मजबूत क्वेरी भाषा का उपयोग करके इसे सरल बनाने का कोई तरीका नहीं है। –

0

उन्हें स्टोर करने के लिए सबसे उपयुक्त वर्गों का उपयोग विशिष्ट एसक्यूएल प्रश्नों और संग्रहित प्रक्रियाओं का उपयोग कर। यह आपकी परियोजना पर एक और निर्भरता भी होगी, इसलिए इसे ध्यान में रखें।

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