2011-01-19 80 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的会话管理法宝。