2009-10-09 6 views
8

हाइबरनेट मेरे हटाए जाने के बाद मैं एक तालिका में एक आईडी को अपडेट करने के लिए एक सुविधा लागू कर रहा हूं। लेकिन मैं कुछ प्रतिक्रिया प्राप्त करना चाहता हूं कि किस दृष्टिकोण पर बेहतर है। साथ ही जिस तालिका में मैं मूल्य अपडेट कर रहा हूं, हाइबरनेट को इसके बारे में पता नहीं है इसलिए मुझे सीधे जेडीबीसी अपडेट करना होगा - यह भी संभव है।हाइबरनेट: इवेंट श्रोता या इंटरसेप्टर, अभ्यास में पेशेवर/विपक्ष क्या हैं?

उत्तर

8

श्रोता/इंटरसेप्टर का उपयोग करने तक, मैं श्रोता के साथ जाऊंगा - यह उन घटनाओं के मामले में अधिक लचीला है जिन्हें सुनवाई जा सकती है। इंटरसेप्टर का प्राथमिक उद्देश्य ऑब्जेक्ट गुणों का निरीक्षण/परिवर्तन करना पूर्व कुछ ईवेंट (उदा। हटाने) के लिए है; जबकि श्रोता को "पोस्टडेलेट" ईवेंट या many others सुनने के लिए कॉन्फ़िगर किया जा सकता है।

हालांकि, अगर कहा गया टेबल मैप नहीं किया गया है तो आपको या तो क्यों चाहिए? हटाए जाने के बाद आप इसे सीधे अपने कोड में अपडेट कर सकते हैं() (या फ्लश() के बाद फ्लैश() कहा जाता है यदि कोई विदेशी कुंजी शामिल है)।

आप इसे ट्रिगर में भी कर सकते हैं (संभवतः; डेटाबेस के लिए जरूरी जानकारी उपलब्ध है या नहीं)।

+0

अच्छी तरह से हाइबरनेट एक दृश्य देखता है और मुझे उस डिलीट पर एक सत्र आईडी में पास करने की आवश्यकता है जिसे मैं कहां से पारित नहीं कर सकता। तो जब हाइबरनेट दृश्य पर डिलीट करता है तो "ट्रिगर" ट्रिगर चलता है लेकिन इस रन के बाद मुझे उस व्यक्ति के लिए सत्र आईडी पास करने का कोई तरीका चाहिए जिसने ऑडिट के रूप में दृश्य की आधार तालिका में हटा दिया है। लेकिन इस बेस टेबल हाइबरनेट को कुछ भी नहीं पता है, इसलिए @PostDelete पर मैं एक गैर ओआरएम-एड टेबल पर एक सम्मिलित/अद्यतन कर सकता हूं? –

+0

इसे आज़माएं सोम –

+0

@PostDeleteEvent (आपके श्रोता को पास किया गया) AbstractEvent (https://www.hibernate.org/hib_docs/v3/api/org/hibernate/event/AbstractEvent.html) से फैला है, जिसमें एक मिल सत्र है() तरीका। तो आप या तो 'createSQLQuery() 'का उपयोग कर सकते हैं या अपने एसक्यूएल को नामित क्वेरी के रूप में परिभाषित कर सकते हैं और' getNamedQuery() 'का उपयोग कर सकते हैं, आवश्यक पैरामीटर सेट कर सकते हैं और इसे निष्पादित कर सकते हैं। मैंने PostDeleteListener में विशेष रूप से यह कोशिश नहीं की है, लेकिन मुझे नहीं लगता कि यह क्यों काम नहीं करेगा। – ChssPly76

1

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

2

ऐसा लगता है कि कई श्रोताओं को पसंद करते हैं - वे घटनाओं की एक विस्तृत सूची प्रदान करते हैं और अधिक लचीला होते हैं, लेकिन ऐसी चीजें हैं जो इंटरसेप्टर ऑफर करते हैं और श्रोताओं नहीं करते हैं।

उदाहरण के लिए, यदि आप डेटाबेस में सहेजने से पहले इकाई को संशोधित करना चाहते हैं, तो एक इंटरसेप्टर का उपयोग किया जाना चाहिए।

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