2011-02-14 21 views
5

Ben hazırda ve görünümler işlenen tembel yükleme ile ünlü problem (in) .... Birçok demek, sadece iki çözüm vardır:Bahar OpenSessionInViewInterceptor çalışmıyor

  • yöntem işlemsel olun (ve bu her zaman desteklenmez)
  • OpenSessionInViewInterceptor'ı kullanın.

ikinci IMO tercih edilir. Bu önleme (aslında aynı Geç yükleme istisna olsun ve hiçbir şey değiştirir) tüm ateş ediyor Neyse emin değilim:

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

Öyle Dokümanları okuma, basit açıklama tabanlı URL eşleşmelerini kullanıyorum İlkbahar 3, bunu kullanıyorum hile yapalım. Ama işe yaramıyor ve ben istisna var. Müdahalecimin ateş ettiğinden nasıl emin olabilirim? Bunu nasıl çözebilirim?

cevap

15

Eğer @ RequestMapping ek açıklama kullanıyorsunuz için bir işlem (ve bir oturumu) açar? Doğru hatırlamıyorsam, önleyiciyi url fasulyesine koymanın bir sorunu vardı. SessionFactory sizin SessionFactory fasulye bir referans olduğunu varsayarak

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

: Bahar 3,0 ile böyle önleme tanımlayabilirsiniz.

Ayrıca, mvc ad alanını da eklemeniz gerekir.

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

Kişisel büyü işleri atamak için deneyin. Her neyse, gelecek için, bir önleyicinin ateşlediğinden nasıl emin olabilirim ve yapılandırmam doğru mu? Aksi takdirde, bu durumlarda olduğu gibi, artık bir istisna alamadığımı görmekten başka bir yol olmadığını da bilmiyorum. Bunu ayıklamak veya günlüğe kaydetmenin bir yolu olmalı! – gotch4

+1

@ gotch4 Eğer org.springframework oturumunu DEBUG olarak açıyorsanız, bunu günlük dosyasında görebilirsiniz. –

+0

Bunu tam olarak nasıl yaparım? Üzgünüm, ben bir lame acemi yaşıyorum – gotch4

4

<mvc:interceptors>'u kullanmayı deneyin. Bu arada

, @Transactional farklı bir şeydir - bu sizin koleksiyonları "görünümünde" çalışması yapmaz. Sadece açıklamalı yöntemi (ve onu çağırır yöntemlerle)

0

Eğer Bahar ve hazırda ile Struts2 kullanıyorsanız, sayesinde OpenSesisonInViewFilter kullanmak ve web.xml''deki