2010-03-04 24 views
5

मेरे पास कुछ हाइबरनेट कोड है जो डेटाबेस में सम्मिलित करता है, और उस सम्मिलित होने पर एक अनुकूलित PostInsertEventListener निकाल दिया जाता है। (अनिवार्य रूप से यह सुनिश्चित करने के लिए एक ट्रिगर है कि अन्य रिकॉर्ड उचित रूप से अपडेट किए गए हैं)हाइबरनेट पोस्टइन्सर्टएवेंटलिस्टर्स-सम्मिलित लेनदेन को सम्मिलित करें?

मुझे क्या करना है इवेंट लिस्टनर के अंदर कोड को मूल सम्मिलन के समान लेनदेन का उपयोग करना है, ताकि यदि सम्मिलन सफलतापूर्वक नहीं करता है, तो EventListener आग नहीं होगी

मैंने सुना है कि आप javax.transaction.Syncronization और Hibernate के transaction.registerSyncronization() विधियों का उपयोग करने के तरीकों का उपयोग कर सकते हैं, लेकिन कहीं भी उपयोग के उदाहरणों का कोई उदाहरण नहीं है।

किसी भी मदद की सराहना की है।

उत्तर

3

मुझे नहीं लगता कि यह संभव है।

यदि मैं समझता हूं, तो आप लेनदेन को सफलतापूर्वक पूरा करने के बाद ही कुछ कोड निष्पादित करना चाहते हैं (प्रतिबद्ध था)। हालांकि, यदि लेनदेन किया जाता है, तो आप समाप्त होने के बाद से उसी लेनदेन में कुछ और नहीं कर सकते हैं।

हालांकि आप क्या कर सकते हैं हालांकि प्रीइन्सर्टएवेंट लिस्टनर का उपयोग किया जाता है जिसे लेनदेन (प्रतिबद्ध होने से पहले) कहा जाता है। यदि लेनदेन विफल हो जाता है तो ईवेंट श्रोता ईवेंट आग लग जाएगा (क्योंकि लेनदेन सफल होने पर हम प्रतिबद्ध नहीं हैं) लेकिन लेन-देन में विफल होने पर आप जो कुछ भी संशोधित करते हैं, उसे डेटाबेस में संग्रहीत नहीं किया जाएगा। श्रोताओं की सूची के लिए https://www.hibernate.org/hib_docs/v3/api/org/hibernate/event/EventListeners.html देखें।

हालांकि एक चेतावनी। आपको श्रोता में बहुत अधिक डेटा संशोधन नहीं करना चाहिए। विशेष रूप से, आपको संग्रह की किसी भी आलसी लोडिंग को ट्रिगर नहीं करना चाहिए।

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