Hibernate会话线程

C0d*_*ack 5 multithreading asynchronous hibernate

我有关于Hibernate和延迟加载的问题.

背景:我有一个Spring MVC Web应用程序,我使用Hibernate作为我的持久层.我正在使用OpenSessionInViewFilter使我能够在视图层中延迟加载实体.我正在扩展HibernateDaoSupport类并使用HibernateTemplate来保存/加载对象.一切都运作良好.到现在为止.

问题:我有一个可以通过Web请求启动的任务.当请求被路由到控制器时,控制器将为此任务创建新的Runnable并启动线程以运行任务.因此原始线程将返回并且放入ThreadLocal(通过OpenSessionInViewFilter)的Hibernate会话不可用于Task的新线程.因此,当任务执行某些数据库操作时,我会得到臭名昭着的LazyInitializationException.

任何人都可以建议我可以为任务提供Hibernate会话的最佳方法吗?

谢谢阅读.

Tom*_*icz 5

制作Runnable一个Spring bean并添加@Transactional注释run.必须警告您,此异步任务不会在与Web请求相同的事务中运行.

请不要启动新线程,使用pooling/executor.