2008-11-07 6 views
5

मैं एक बहु-प्रणाली है कि इस तरह काम करता है निर्माण कर रहा हूँ:दो nHibernate सत्रों के लिए किसी ऑब्जेक्ट को कैसे बनाए रखें?

जबकि वहाँ संस्थाओं हैं:

  1. nHibernate से एक इकाई हो जाता है (वर्तमान सत्र का उपयोग कर)

  2. एक नया धागा शुरू होता है कि इस इकाई के साथ काम करेगा *

जब मैं यह नया धागा शुरू करता हूं, तो उसे एक नया होना आवश्यक है सत्र, क्योंकि nHibernate थ्रेड-सुरक्षित नहीं है। मैं इसे बना देता हूं, लेकिन इस सत्र के लिए काम करने से पहले प्राप्त इकाई।

आज मैं आईडी को पारित करने वाली एक नई इकाई nHibernate से पुनर्प्राप्त इस स्थिति को हल कर रहा हूं। लेकिन यह महंगा है, और मैं अपने एसएलए को प्राप्त करने के लिए कुछ समय बचाने की कोशिश कर रहा हूं।

क्या इस ऑब्जेक्ट को नए डेटाबेस कॉल करने की आवश्यकता के बिना इस नए सत्र में जोड़ने का कोई तरीका है? दूसरा सत्र बंद नहीं होगा, वे सभी आवेदन के अंत तक खोले गए हैं।

उत्तर

4

यदि आप अलग वस्तुओं के साथ काम कर रहे हैं, तो आपको उन्हें सत्र में दोबारा जोड़ना होगा। आप ऐसा कर सकते हैं यदि आपके पास उन वस्तुओं के सही हाइबरनेट आईडी हैं जिनके साथ आप काम कर रहे हैं, एक कॉलिंग कॉल कर रहे हैं, और फिर अपनी प्रतिलिपि को एक हाइबरनेट के साथ विलय कर सत्र में डाल दें। सुनिश्चित करें कि आप विलय का उपयोग करते हैं, हालांकि, क्योंकि saveOrUpdate() अलग-अलग ऑब्जेक्ट से अनुपलब्ध किसी भी बच्चे को नहीं हटाएगा, बस नए बच्चों को जोड़ें और मौजूदा बच्चों में परिवर्तन सहेजें।

+0

असल में मेरे पास नए सत्र के साथ ऑब्जेक्ट करने के लिए नए सत्र का ऑब्जेक्ट है, लेकिन बिंदु प्रदर्शन सुधार उद्देश्यों के कारण डीबी को फिर से कॉल करने से बचने का प्रयास कर रहा है। –

2

Evict + Lock के अलावा आप डेटाबेस पर जाने के बिना इकाइयों का पुनर्निर्माण करने के लिए 2: nd स्तर कैश का उपयोग कर सकते हैं। मुझे नहीं पता कि यह आपके आवेदन के अनुकूल है या नहीं, लेकिन मुझे यह भी लगता है कि सत्र को अन्य ट्रेड तक पास करना संभव है जब तक कि पहला धागा इसमें परिवर्तन करने से रोकता है।

1

मैंने दूसरे धागे को जोड़ने के बाद इसे पहले धागे से अलग कर दिया।