2013-04-15 52 views
1

我正在開發具有多個彈簧上下文的Web應用程序。它有一個保持業務邏輯,hibernate會話和應用程序的核心需求的主要上下文,其他上下文用於spring mvc綁定。通常,應用程序正常工作和一切,但是當我刷新主背景下,努力實現從其他上下文Hibernate的Session,Hibernate的Session拋出此異常:Spring上下文刷新使Hibernate會話拋出此異常:找不到當前線程的會話

org.hibernate.HibernateException: No Session found for current thread at   
org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:97) at 
org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:980)... 

但有趣的是應用程序可以做的啓動開始,包括選擇大量的來自db的數據。

有沒有辦法讓我可以更新春天的安全和健康?

P.S:我可以得到沒有問題的其他spring上下文對象。並且應用程序可以很好地處理多個上下文,直到我刷新主環境。我試着在main context之後刷新mvc上下文,從中我調用了hibernate session。在mvc上下文中仍然是一個例外。

回答

0

你得到這個錯誤的原因是你正在從線程下面打出Hibernate會話。從我記憶中,這些會話與創建它們的線程相關聯。這就是爲什麼你不能將代理Hibernate實體傳遞給像BlazeDS這樣的框架。只要代理實體離開線程,會話就沒有長期關聯,並且你沒有能力去處理正在代理的項目。

一種解決方案可能是不使用代理,並急切地加載所有關係。然而,這將破壞使用ORM的主要好處之一。或者,如果您可以以某種方式重新啓動問題中的所有線程,創建與新Hibernate會話相關聯的新線程,那也可能起作用。

+0

好的,但這裏是問題:我不創建我的實體在春天的上下文中,他們創建在休眠會議,並沒有與春天上下文的關係。如果線程被銷燬並創建,那麼會在新線程中創建hibernate會話和實體。我在嘗試上下文刷新之前,應該在多個春天的上下文中工作。 – Masterhead

相關問題