我正在使用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(),但仍然无法解决问题。
有没有办法手动保持会话打开或为线程打开一个新会话?
感谢您的帮助!
答案 0 :(得分:1)
您可以使用Spring将SessionFactory
注入Runnable
,从中打开Session
,并管理Session
和Transaction
的生命周期使用vanilla Hibernate API而不依赖于Spring的会话管理魔力。