2011-01-19 109 views
2

我使用Spring 3和Hibernate一起使用。我有一個用戶請求在spring控制器中啓動一個java線程,然後發送一個響應,所以當用戶http響應已經發送時,線程可能會繼續工作。Spring/Hibernate:爲線程保持會話打開,還是打開一個新線程?

如果我在我的線程懶收藏工作,我得到以下錯誤:

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: my.model.MyClass.lazyCollection, no session or session was closed 

我讀我可以使用同樣,Hibernate.initialize(實體),以充分獲取懶的集合,但我不能以此作爲我正在線程中填充集合。此外,我試圖使用merge(),但仍不能解決問題。

有沒有辦法手動保持會話打開或打開一個新的線程?

感謝您的幫助!

+0

你是否在一個web應用程序,所以一個http請求是一個thred,或者你是別的嗎? – Ralph 2011-01-19 15:34:11

+0

是的,我在一個使用spring mvc的web應用程序。但是,除了請求線程外,我還自己創建一個請求線程。 – Erik 2011-01-19 15:45:37

回答

1

您可以使用Spring的SessionFactory注入到你的Runnable,打開從它Session,和管理SessionTransaction使用香草的壽命休眠的API,而無需依賴於Spring的會話管理法寶。