我有一个关于Hibernate和延迟加载的问题。休眠会话线程
背景: 我有一个Spring MVC web应用程序,我使用Hibernate作为我的持久层。我正在使用OpenSessionInViewFilter让我在视图层中延迟加载实体。我扩展了HibernateDaoSupport类并使用HibernateTemplate来保存/加载对象。一切都工作得很好。到现在为止。
问题: 我有一个任务可以通过web请求启动。当请求被路由到控制器时,控制器将为该任务创建一个新的Runnable并启动该线程来运行该任务。因此,原始线程将返回,并且放置在ThreadLocal(由OpenSessionInViewFilter)中的Hibernate会话不可用于任务的新线程。所以当任务做了一些数据库的工作时,我得到了臭名昭着的LazyInitializationException。
任何人都可以提出我可以让Hibernate会话可用于任务的最佳方式吗?
感谢您的阅读。
什么意思是不开始新的线程? – Dejell 2014-05-05 20:04:27
@Dejel可能使用[ScheduledThreadPoolExecutor](http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ScheduledThreadPoolExecutor.html)或类似的机制。 – user11153 2014-09-18 12:23:12