最近在使用Spring MVC开发,在使用Hibernate查询数据库的时候因为Session在DAO层被关闭导致延迟加载的属性在使用时报错,经过查询网上资料将解决方法整理如下:
我使用的是OpenSessionInViewInterceptor的方法解决:
OpenSessionInViewInterceptor的JAVA配置方法
配置spring mvc的拦截器WebMvcConfigurerAdapter
public class WebAppConfig extends WebMvcConfigurerAdapter
实现添加拦截器方法
@Override
public void addInterceptors(InterceptorRegistry registry){
OpenSessionInViewInterceptor sessionInterceptor = new OpenSessionInViewInterceptor();
sessionInterceptor.setSessionFactory(sessionFactory)
registry.addWebRequestInterceptor(sessionInterceptor);
}
另外在Hibernate SessionFactory创建的时候使用一下配置:
hibernate.current_session_context_class = org.springframework.orm.hibernate5.SpringSessionContext
参考内容:
Class OpenSessionInViewInterceptor
OpenSessionInViewInterceptor not working with Hibernate
如果你报createSQLQuery is not valid without active transaction,请看这里