Spring 即使使用OpenSessionInViewFilter,还有另一个懒散的初始化异常
我在使用Spring3/Hibernate3.6和jsp的web应用程序中遇到了可怕的LazyInitializationException异常。我的web.xml中有OpenSessionInViewFilter,但我的hsSession似乎正在关闭或以某种方式失效。我还检查了我的申请没有引起任何异常 这是我的web.xmlSpring 即使使用OpenSessionInViewFilter,还有另一个懒散的初始化异常,spring,hibernate,Spring,Hibernate,我在使用Spring3/Hibernate3.6和jsp的web应用程序中遇到了可怕的LazyInitializationException异常。我的web.xml中有OpenSessionInViewFilter,但我的hsSession似乎正在关闭或以某种方式失效。我还检查了我的申请没有引起任何异常 这是我的web.xml <filter> <filter-name>hibernateFilter</filter-name>
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
<init-param>
<param-name>sessionFactoryBeanName</param-name>
<param-value>sessionFactory</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<servlet-name>hedgebenefits</servlet-name>
</filter-mapping>
冬眠过滤器
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
sessionFactoryBeanName
会话工厂
冬眠过滤器
/*
冬眠过滤器
对冲收益
Context.xml是:
<mvc:annotation-driven/>
<tx:annotation-driven/>
<context:component-scan base-package="com.hedgebenefits.*"/>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/managerie"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean id="namingStrategy" class="org.hibernate.cfg.ImprovedNamingStrategy"/>
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="packagesToScan" value="com.hedgebenefits.domain"/>
<property name="dataSource" ref="dataSource"/>
<property name="namingStrategy" ref="namingStrategy"/>
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.show_sql=true
</value>
</property>
</bean>
hibernate.dialogue=org.hibernate.dialogue.mysqldialogue
hibernate.show_sql=true
Jsp是:
<tr>
The list is :
<td>
<c:forEach var="admin" items="${admins}">
Admin is ${admin.username},
<c:forEach var="sector" items="${admin.sectors}">
sector is ${sector.name}
</c:forEach>
</c:forEach>
</td>
</tr>
名单如下:
Admin是${Admin.username},
扇区为${sector.name}
服务用@Transactional注释:
@Service
@Transactional
public class AdminServiceImpl implements AdminService {
private AdminDao adminDao;
@Autowired
public AdminServiceImpl(AdminDao adminDao) {
this.adminDao = adminDao;
}
...
@Override
public List<Admin> listAllAdmins() {
return adminDao.listAllAdmins();
}
}
@服务
@交易的
公共类AdminServiceImpl实现AdminService{
私人管理员;
@自动连线
公共AdminServiceImpl(AdminDao AdminDao){
this.adminDao=adminDao;
}
...
@凌驾
公共列表ListalAdmins(){
返回adminDao.listalAdmins();
}
}
道是:
@Repository
public class AdminDaoImpl implements AdminDao{
private SessionFactory sessionFactory;
@Autowired
public AdminDaoImpl(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
....
@Override
public List<Admin> listAllAdmins() {
List<Admin> adminList = sessionFactory.getCurrentSession().createCriteria(Admin.class)
.setMaxResults(5)
.list();
return adminList;
}
}
@存储库
公共类AdminDaoImpl实现AdminDao{
私人会话工厂会话工厂;
@自动连线
公共AdminDaoImpl(SessionFactory SessionFactory){
this.sessionFactory=sessionFactory;
}
....
@凌驾
公共列表ListalAdmins(){
List adminList=sessionFactory.getCurrentSession().createCriteria(Admin.class)
.setMaxResults(5)
.list();
返回管理员列表;
}
}
编辑:添加控制器和堆栈跟踪
控制器为:
@Controller
@RequestMapping(value = "/admin")
@SessionAttributes(value = "admin")
public class AdminRegistrationController {
...
@Autowired
private AdminService adminService;
@RequestMapping(value = "/list")
public ModelAndView listRegisteredAdmins() {
List<Admin> admins = adminService.listAllAdmins();
return new ModelAndView(LIST_ADMINS.getViewName()).addObject("admins", admins);
}
@控制器
@请求映射(value=“/admin”)
@SessionAttributes(value=“admin”)
公共类AdminRegistrationController{
...
@自动连线
专用AdminService AdminService;
@请求映射(value=“/list”)
公共模型和视图列表RegisteredAdmins(){
List admins=adminService.ListalAdmins();
返回新的ModelAndView(LIST_ADMINS.getViewName()).addObject(“ADMINS”,ADMINS);
}
Stacktrace是:
org.apache.jasper.JasperException: An exception occurred processing JSP page /WEB-INF/jsp/list.jsp at line 15
12: <td>
13: <c:forEach var="admin" items="${admins}">
14: Admin is ${admin.username},
15: <c:forEach var="sector" items="${admin.sectors}">
16: sector is ${sector.name}
17: </c:forEach>
18: </c:forEach>
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:521)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:430)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:262)
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1157)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:927)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:827)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:70)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
root cause
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.hedgebenefits.domain.Admin.sectors, no session or session was closed
org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:383)
org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:375)
org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:368)
org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:111)
org.hibernate.collection.PersistentBag.iterator(PersistentBag.java:272)
org.apache.taglibs.standard.tag.common.core.ForEachSupport.toForEachIterator(ForEachSupport.java:348)
org.apache.taglibs.standard.tag.common.core.ForEachSupport.supportedTypeForEachIterator(ForEachSupport.java:224)
org.apache.taglibs.standard.tag.common.core.ForEachSupport.prepare(ForEachSupport.java:155)
javax.servlet.jsp.jstl.core.LoopTagSupport.doStartTag(LoopTagSupport.java:256)
org.apache.jsp.WEB_002dINF.jsp.list_jsp._jspx_meth_c_005fforEach_005f1(list_jsp.java:149)
org.apache.jsp.WEB_002dINF.jsp.list_jsp._jspx_meth_c_005fforEach_005f0(list_jsp.java:112)
org.apache.jsp.WEB_002dINF.jsp.list_jsp._jspService(list_jsp.java:70)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:262)
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1157)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:927)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:827)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:70)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
org.apache.jasper.jaspereException:在第15行处理JSP页面/WEB-INF/JSP/list.JSP时发生异常
12:
13:
14:Admin是${Admin.username},
15:
16:扇区为${sector.name}
17:
18:
堆栈跟踪:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:521)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:430)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javaservlet.http.HttpServlet.service(HttpServlet.java:717)
org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:262)
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1157)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:927)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:827)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
javaservlet.http.HttpServlet.service(HttpServlet.java:617)
javaservlet.http.HttpServlet.service(HttpServlet.java:717)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:70)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
根本原因
org.hibernate.LazyInitializationException:未能延迟初始化角色集合:com.hedgebenefits.domain.Admin.sectors,未关闭任何会话或会话
org.hibernate.collection.AbstractPersistentCollection.ThrowlazyiInitializationException(AbstractPersistentCollection.java:383)
org.hibernate.collection.AbstractPersistentCollection.ThrowlazyiInitializationExceptionInNotConnected(AbstractPersistentCollection.java:375)
org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:368)
org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:111)
org.hibernate.collection.PersistentBag.iterator(PersistentBag.java:272)
org.apache.taglibs.standard.tag.common.core.ForEachSupport.toForEachIterator(ForEachSupport.java:348)
org.apache.taglibs.standard.tag.common.core.ForEachSupport.supportedTypeForeachInterator(ForEachSupport.java:224)
org.apache.taglibs.standard.tag.common.core.ForEachSupport.prepare(ForEachSupport.java:155)
javax.servlet.jsp.jstl.core.LoopTagSupport.doStartTag(LoopTagSupport.java:256)
org.apache.jsp.WEB\u 002dINF.jsp.list\u jsp.\u jspx\u meth\u c\u 005fforEach\u 005f1(list\u jsp.java:149)
org.apache.jsp.WEB\u 002dINF.jsp.list\u jsp.\u jspx\u meth\u c\u 005fforEach\u 005f0(list\u jsp.java:112)
org.apache.jsp.WEB\u 002dINF.jsp.list\u jsp.\u jsp服务(list\u jsp.java:70)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javaservlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servl