2012-11-09 25 views
0

我正在使用OpenSessionInViewFilter。它在我的web.xml中的第一過濾使用hibernate4.1和spring 3.1獲取LazyInitializationException

<filter> 
    <filter-name>openSessionInViewFilter</filter-name> 
    <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class> 
    </filter> 
    <filter-mapping> 
    <filter-name>openSessionInViewFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
    </filter-mapping> 

這裏是我的applicationContext.xml

<bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory"/> 
    </bean> 

<bean id="userBc" class="com.tutorial.bc.auth.UserBcImpl"> 
    <property name="userDao"> 
     <ref local="userDao"/> 
    </property> 
    </bean> 
... 
<tx:annotation-driven transaction-manager="txManager"/> 

我在HBM映射文件 -

<set name="userCoachingRoles" table="user_coaching_role" lazy="true" cascade="all-delete-orphan"> 
     <key column="user_id"/> 
     <many-to-many column="coaching_id" class="com.tutorial.entity.coaching.Coaching" lazy="proxy"/> 
</set> 

在我userBc其中,該方法的一部分我得到的用戶標有@Transactional,我的實體用戶有一個方法getUserCoachingRoles。我得到異常達不到這個方法 -

org.hibernate.LazyInitializationException: could not initialize proxy - no Session 

我無法理解爲什麼沒有會話,即使我使用OpenSessionInViewFilter。需要幫助。

回答

1

您是否有機會在單獨的線程中調用getUserCoachingRoles?如果是這樣,這是預期的行爲。

由於UserCoachingRoles未被加載,Spring無法訪問該線程內的數據庫連接,無法加載它。您需要:

  • 在您的線程中創建封閉會話包裝器;
  • 傳遞的UserCoachingRoles的ID給該線程而不是傳遞對象和加載該線程
+0

由於內部的屬性。我確實在一個單獨的線程中調用該方法。 – Shwetanka

相關問題