2013-01-18 16 views
13

मेरे पास एक ऐसा एप्लिकेशन है जो हाइबरनेट 4.x का उपयोग करता है, और वर्तमान में यह देशी हाइबरनेट एपीआई का उपयोग कर रहा है (जिसका अर्थ है कि मेरे पास SessionFactory और Session एस है)। मैं सिर्फ noticed कि मौजूदा मानदंड एपीआई जेपीए के (बेहतर) मानदंड एपीआई के पक्ष में पदावनत किया गया है:जेपीए-शैली मानदंड/मानदंड हाइबरनेट सत्र से प्रश्नकर्ता प्रश्न

हाइबरनेट एक पुराने, लीगेसी org.hibernate.Criteria एपीआई पदावनत विचार किया जाना चाहिए जो प्रदान करता है। कोई सुविधा विकास उन एपीआई को लक्षित नहीं करेगा। आखिरकार, हाइबरनेट-विशिष्ट मानदंड सुविधाओं को जेपीए javax.persistence.criteria.CriteriaQuery में एक्सटेंशन के रूप में पोर्ट किया जाएगा।

मैं EntityManager सीधे का उपयोग कर (भले ही यह वहाँ से एक हाइबरनेट Session पाने के लिए आसान है) क्योंकि हम विन्यास तर्क यह है कि करने की आवश्यकता होगी हाइबरनेट कस्टम की एक बड़ी राशि के लिए अपने आवेदन से अधिक कन्वर्ट करने के लिए है नहीं करना चाहती प्रतिस्थापित किया। इसके बावजूद, मैं निश्चित रूप से जेपीए मानदंड एपीआई का उपयोग करना शुरू करना चाहता हूं, क्योंकि पुरानी एपीआई को बहिष्कृत किया गया है (और भविष्य में कुछ यादृच्छिक बिंदु पर संभावित रूप से गायब हो जाएगा, अगर पिछले हाइबरनेट रिलीज किसी भी संकेत हैं) और वे भी बेहतर प्रकार की सुरक्षा प्रदान करते हैं।

यदि मैं सत्र कारखाना/सत्र का उपयोग कर रहा हूं, तो मैं नए मानदंड/मानदंडबिल्डर एपीआई का उपयोग कैसे कर सकता हूं?

+0

वर्तमान में आप अपने सत्र कैसे प्राप्त कर रहे हैं? क्या यह एक केंद्रीय स्थान पर है? यदि ऐसा है तो आपको इसे बदलने में सक्षम होना चाहिए ताकि आप अपने सत्र EntityManager से प्राप्त कर सकें जैसे कि आपके पास ईएम तक पहुंच हो। समस्या यह है कि सत्र का उपयोग EntityManager द्वारा किया जाता है, न कि दूसरी तरफ।लेकिन यदि आप अपना उच्च स्तर का उपयोग EntityManager करते हैं और उस से सत्र प्राप्त करें (इसलिए आप पुराने कोड को नहीं तोड़ते हैं) तो आप बेहतर होंगे। –

+0

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

+1

यह सच है, लेकिन जैसे आप मिश्रण और जेपीए से मेल खाते हैं और इस तरह से हाइबरनेट कर सकते हैं यह प्रतीत नहीं होता। यहां तक ​​कि यदि आप EntityManager के बिना CriteriaQuery उदाहरण प्राप्त करते हैं, तो आपको इसके साथ एक क्वेरी निष्पादित करने के लिए एक ईएम की आवश्यकता होगी। –

उत्तर

1

हमारे पास हमारे प्रोजेक्ट में एक ही दुविधा है। परियोजना वास्तव में जटिल है: 90% इकाइयां गतिशील रूप से उत्पन्न होती हैं; हाइबरनेट मानदंड एपीआई, भारी डीएओ और सेवा परत के ऊपर एपीआई स्तर लागू किया गया है, जो बहुत व्यापक रूप से उपयोग किया जाता है; हमारे हाइबरनेट संस्करण को विशिष्ट कार्यक्षमता का समर्थन करने के लिए कई बार पैच किया जाता है (जैसे START WITH/CONNECT BY, ARRAY ऑरैकल में टाइप करें और इसी तरह); postgresql और oracle दोनों वैकल्पिक रूप से उपयोग किया जाता है।

नया जेपीए एपीआई हमारे लिए बहुत उपयोगी होगा। हमें कुछ प्रकार के प्रदर्शन कारणों, substring, trim और इसी तरह के लिए मानदंड एपीआई (एचक्यूएल नहीं) स्तर (जैसे NVL/coalesce) पर फ़ंक्शंस का उपयोग करने की क्षमता की आवश्यकता है। इसके अलावा हमें हाइबरनेट एनवर्र्स की आवश्यकता है जो केवल "EntityManager" जेपीए कार्यान्वयन के लिए उपलब्ध है।

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

इसलिए हम हमारे लिए दो संभव तरीके पर विचार करें: Expression एस के स्वयं के कार्यान्वयन के साथ SQLCriterion का उपयोग करें (CriteriaQuery साथ संकल्प स्तंभ नाम और SQL से अनुवाद) या माइग्रेशन "EntityManager"/CriteriaBuilder करने के लिए। दूसरा तरीका अपरिहार्य दिखता है। लेकिन जेपीए कार्यान्वयन के लिए माइग्रेशन कई छिपी हुई समस्याओं को लाता है जो हमारी परियोजना को बर्बाद कर देते हैं।

अगर हम प्रवासन का चयन करेंगे और यह उपयोगी होगा, तो मैं यहां छोड़ दूंगा कि इस गतिविधि में हम किस समस्या का सामना करेंगे।

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