Spring / Hibernate:为线程保持会话打开,还是打开一个新的?

时间:2011-01-19 13:58:22

标签: hibernate spring java-ee servlet-filters

我正在使用Spring 3和Hibernate。我有一个用户请求,它在spring控制器中启动一个java线程然后发送一个响应,因此线程可能会在用户http响应已经发送时继续工作。

如果我在我的线程中使用惰性集合,我会收到以下错误:

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

我读过我可以使用Hibernate.initialize(实体)来完全获取惰性集合,但我不能使用它,因为我正在线程中填充集合。此外,我尝试使用merge(),但仍然无法解决问题。

有没有办法手动保持会话打开或为线程打开一个新会话?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您可以使用Spring将SessionFactory注入Runnable,从中打开Session,并管理SessionTransaction的生命周期使用vanilla Hibernate API而不依赖于Spring的会话管理魔力。