2011-02-14 13 views
5

मैं था (में) हाइबरनेट और आलसी लोड हो रहा है जब विचारों गाया जाता है के साथ प्रसिद्ध समस्या .... के रूप में कई का कहना है, केवल दो समाधान हैं:स्प्रिंग OpenSessionInViewInterceptor काम नहीं करता है

  • विधि व्यवहार बनाओ (और यह हमेशा desiderable नहीं है)
  • OpenSessionInViewInterceptor का उपयोग करें।

उत्तरार्द्ध बेहतर आईएमओ है। वैसे भी मुझे यकीन है कि अगर यह इंटरसेप्टर सब पर फायरिंग कर रहा है (वास्तव में मैं एक ही लेज़ी लोड हो रहा है अपवाद हो और कुछ भी नहीं बदलता है) नहीं कर रहा हूँ:

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: it.jsoftware.jacciseweb.beans.Listino.prodotti, no session or session was closed 

मैं, सरल एनोटेशन आधारित url मानचित्रण का उपयोग कर रहा है ताकि के लिये दस्तावेज पढ़ने स्प्रिंग 3, मैं इसे अपने सर्वलेट-context.xml में उपयोग कर रहा हूं:

<bean id="handlerMapping" 
     class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> 
     <!-- <property name="order" value="2" /> --> 
     <property name="interceptors"> 
      <list> 
       <ref bean="openSessionInViewInterceptorInst" /> 
      </list> 
     </property> 
    </bean> 

जो चाल बनाना चाहिए। लेकिन यह काम नहीं कर रहा है और मुझे अपवाद मिलता है। मैं कैसे सुनिश्चित करूं कि मेरा इंटरसेप्टर फायरिंग कर रहा है? मैं इसे कैसे हल करूं?

उत्तर

15

क्या आप @RequestMapping एनोटेशन का उपयोग कर रहे हैं? अगर मुझे सही याद है तो यूआरएल बीन पर इंटरसेप्टर डालने के साथ कोई समस्या थी। यह सोचते हैं कि sessionFactory अपने SessionFactory सेम लिए एक संदर्भ है

<mvc:interceptors> 
    <bean class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor"> 
     <property name="sessionFactory"> 
      <ref local="sessionFactory" /> 
     </property> 
    </bean> 
</mvc:interceptors> 

: स्प्रिंग 3.0 के साथ आप इस तरह इंटरसेप्टर परिभाषित कर सकते हैं।

आपको एमवीसी नेमस्पेस भी शामिल करने की आवश्यकता होगी।

xmlns:mvc="http://www.springframework.org/schema/mvc" 
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd" 
+1

आपका जादू काम करता है, धन्यवाद करने के लिए प्रयास करें। वैसे भी, भविष्य के लिए, मैं कैसे सुनिश्चित कर सकता हूं कि एक इंटरसेप्टर फायरिंग हो रहा है और मेरी कॉन्फ़िगरेशन सही है? अन्यथा, इस परिस्थितियों में, यह जानने के अलावा कोई अन्य तरीका नहीं है कि मुझे अब अपवाद नहीं मिला है। इसे डीबग करने या इसे लॉग करने का एक तरीका होना चाहिए! – gotch4

+1

@ gotch4 अगर आप org.springframework पर लॉगिंग चालू करते हैं तो DEBUG पर आप इसे लॉग फ़ाइल में देख सकते हैं। –

+0

मैं यह कैसे ठीक से कर सकता हूं? क्षमा करें, मैं एक लंगड़ा नौसिखिया हूँ – gotch4

4

<mvc:interceptors> का उपयोग करने का प्रयास करें।

वैसे, @Transactional एक अलग बात है - यह आपके संग्रह को "दृश्य" में काम नहीं करता है। यह एनोटेटेड विधि (और जिस तरीके से कॉल करता है) के लिए एक लेनदेन (और एक सत्र) खोलता है

0

आप स्प्रिंग और हाइबरनेट साथ struts2 का उपयोग कर रहे हैं, तो OpenSesisonInViewFilter का उपयोग करें और web.xml में असाइन करें

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